无法传递指向函数的指针

时间:2011-03-03 11:12:01

标签: c++

我删除了所有不需要的段。我试图将指针传递给重载的运算符并使用模板。但这仍然无效。

#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 个答案:

答案 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 ...还有一个运算符+的重载,它接受并返回一个指针?

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

你有一个指针,所以当你调用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.   

此外,运营商+不对。请了解该参考资料,并尝试从一本好书中学习。作为第一个程序,这是一个不错的尝试。