2011-03-03 295 views
0

我已经删除了所有不需要的段。我试图将指针传递给重载操作符并使用模板。但是这仍然不起作用。无法将指针传递给函数

#include<iostream.h> 
#include<conio.h> 

class Test{ 
     private: 
      int a; 
     public: 
      Test(){} 
      Test(int k){ 
       a=k; 
      } 
      Test* operator +(Test *p){ 
        Test *temp=new Test(this->a+p->geta()); 
        return temp; 
      } 
      int geta(){ 
        return a; 
      } 
}; 

template<class T> 
    T* sum(T* a,T* b){ 
    return a+b; 
} 

int main(){ 
    Test *t1,*t2; 
    t1=new Test(5); 
    t2=new Test(7); 
    Test *z=sum(t1,t2); 
    cout<<z->geta(); 
    getch(); 
} 

回答

3

首先,t1是一个指针,你是不正确调用add方法 - 应该是t1->add(t2)。其次,sum()方法需要论据不是指针,即模板参数推导出Test而非Test*,因此你需要签名更改为类似:

template <typename T> 
T* sum(T* a, T* b) 
{ 
    return a->add(b); // or some variant... 
} 
+0

真的有任何需要使它成为模板吗?因为它是通过两个整数到一个完美的模板,只是添加他们 – CashCow 2011-03-03 11:24:55

+0

@CashCow,在这种情况下,真的没有必要 - 我只是纠正他的用法... – Nim 2011-03-03 11:27:35

+0

thanx ....那t1.add只是一个愚蠢的错误......但我得到你说你的abt模板...我的印象是它包含了指向性的武器......我只是在模板上玩弄我...我不打算使用这个代码段newhr ....我是一个初学者,你看.... ....谢谢你... – JunkMechanic 2011-03-03 14:01:42

1

谁教人到C这样++编程? iostream.h ???并且运算符+的重载需要并返回一个指针?

如果您尝试将其用于Test对象,则总和将因此失败。事实上,它增加了整数,而不是测试。

你有一个指针,所以当你调用add时,你必须使用 - >来调用该函数,但这真是一个大混乱。

+0

Wats错误的wid iostream.h ....我是绝对playin arnd wid模板....我的第一个程序模板...没有人教我... – JunkMechanic 2011-03-03 14:21:33

+0

@ankur:使用'cout'的正常方法是'#include '......'std :: cout <<“等”;' – Bill 2011-03-03 17:21:18

0

由于Nim已经正确回答。我会简单地提出一些建议。

不需要这个 - > a。只有一个就足够了。

int d=a+p->geta(); 
int k=sum(2,4); is again wrong as this is going to return class and not int. 

此外operator +是不正确的。请学习参考资料,并尝试从一些好书学习。作为第一个程序,这是一个不错的尝试。