尽管运算符过载,但object = -object仍无法编译

时间:2012-11-29 18:08:34

标签: c++ operator-overloading

  

可能重复:
  How to overload unary minus operator in C++?

我有一个C类,它会重载许多运算符:

class C
{
  ...
  C& operator-=(const C& other) {...}
  const C operator-(const C& other) {...}
}
inline const C operator*(const double& lhs, const C& rhs)

现在我想要反转一个C类型的对象

c = -c;

gcc给了我以下错误:

no match for >>operator-<< in >>-d<<
candidate is: const C C::operator-(const C&)

使用c = -1 * c有效,但我希望能够缩短它。我班上缺少什么?


解决:添加了一元运算符 - :

C operator-() const {...}

作为C的成员。

3 个答案:

答案 0 :(得分:5)

你重载了二元运算符。你还需要重载一元 - 运算符

How to overload unary minus operator in C++?

如何重载一元 - 运算符

答案 1 :(得分:3)

您重载了二进制 -,二进制*和复合赋值-=运算符。表达式c = -c使用一元 -,您永远不会重载。

如果您想通过独立(可能是朋友)功能重载一元-,则必须相应地声明它。只需添加friend关键字

即可在类定义中完成
class C
{
  ...
  friend C operator-(const C& other) {...}
};

或通过在类定义之外移动函数声明

class C
{
  ...
};

inline C operator -(const C& other) {...}

或者,如果您要将一元-声明为成员,则必须在没有参数的情况下声明它

class C
{
  ...
  C operator-() const {...}
};

答案 2 :(得分:0)

进行此更改:

const C operator-() {...}