我删除了所有不需要的段。我试图将指针传递给重载的运算符并使用模板。但这仍然无效。
#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();
}
答案 0 :(得分: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...
}
答案 1 :(得分:1)
谁教人们用这种方式编写C ++? iostream.h
...还有一个运算符+的重载,它接受并返回一个指针?
你有一个指针,所以当你调用add时你必须使用 - &gt;调用函数,但实际上这是一个很大的混乱。
答案 2 :(得分: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.
此外,运营商+不对。请了解该参考资料,并尝试从一本好书中学习。作为第一个程序,这是一个不错的尝试。