类型的无效操作数 - c ++

fgf*_*jhm 2 c++ overloading operator-keyword

我在c ++代码上有一个名为ThreeDigits的类.我重载了+操作数,这样:

ThreeDigits* ThreeDigits::operator+(const ThreeDigits &number) const

{
   double result= getNumber()+number.getNumber();
   ThreeDigits* new_result=new ThreeDigits(result);
   return new_result;
}
Run Code Online (Sandbox Code Playgroud)

但是当我写主要功能时:

    ThreeDigits* first=new ThreeDigits(2.55998);
    ThreeDigits* second=new ThreeDigits(5.666542);
    ThreeDigits* result=first+second;
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误:类型为ThreeDigits*和ThreeDigits*的无效操作数为二元运算符+

你能告诉我这是什么问题吗?谢谢

Mat*_*lia 12

您正在尝试对指向对象的指针进行求和,而不是对象本身.要调用重载的运算符,必​​须在对象上调用它,从而取消引用指针.

顺便说一下,用new一种可怕的C++ 方式创建所有这些对象; 在C++中,与Java/C#不同,您应该new只在必要时使用,并在堆栈上分配所有其余部分.具有operator+指针返回给新创建的对象是可憎的.

编写代码的C++方式是:

ThreeDigits ThreeDigits::operator+(const ThreeDigits &number) const
{
   return ThreeDigits(getNumber()+number.getNumber()); // construct a temporary and return it
}

// ...

ThreeDigits first(2.55998);
ThreeDigits second(5.666542);
ThreeDigits result=first+second;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,重载算术运算符的常用方法是首先重载赋值版本(+ =, - =,...),然后在它们上构建"普通"版本.有关运算符重载的更多信息,请参阅运算符重载FAQ.