实现重载运算符“+”时出错

时间:2012-10-22 01:16:35

标签: c++ operator-overloading

我有一个MyClass这是一个链接列表,我已经覆盖了运营商+:

MyNode
{
   int value;
   MyNode* link;
}
MyClass
{
   MyNode* first;
   MyNode* current;
   MyNode* last;
   int count;
}
MyClass MyClass::operator+(MyClass* operand)
{
   MyClass sum;
   for(int i = 0; i < count; i++)
   {
      MyNode* newNode
      newNode->value = value + operand->value;
      sum->insert(newNode);
   }
   return sum;   
}

当我尝试在我的主函数中实现它时,如下所示:

MyClass* a = new MyClass();
MyClass* b = new MyClass();
MyClass* c;

c = a + b;

编译器抛出错误:“无法添加两个指针”。

2 个答案:

答案 0 :(得分:4)

你是来自Java背景吗?您不需要new来创建对象:

试试这个:

MyClass MyClass::operator+(const MyClass& operand)
{
   MyClass result;

   // Perform addition ...

   return result;  
}

MyClass a;
MyClass b;
MyClass c;

c = a + b;

答案 1 :(得分:0)

两个问题。首先,您的运营商签名错误。 operator+应该将const引用作为参数并返回一个const值。因此:

const MyClass MyClass::operator+(const MyClass& operand)

其次,您尝试添加指针本身而不是它们指向的对象。所以你需要:

*c = *a + *b;

要100%正确,操作符本身应声明为const函数:

 const MyClass MyClass::operator+(const MyClass& operand) const