1

可能重复:
如何在 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的一员。

4

3 回答 3

5

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

如何在 C++ 中重载一元减号运算符?

关于如何重载一元运算符

于 2012-11-29T18:22:23.863 回答
3

您重载了二元 -、二元*和复合赋值-=运算符。表达式c = -c使用unary -,您从未重载过。

如果您想-通过独立(也许是朋友)函数重载一元,则必须相应地声明它。只需添加friend关键字即可在类定义中完成

class C
{
  ...
  friend C operator-(const C& other) {...}
};

或通过将函数声明移到类定义之外

class C
{
  ...
};

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

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

class C
{
  ...
  C operator-() const {...}
};
于 2012-11-29T18:29:16.943 回答
0

进行此更改:

const C operator-() {...}
于 2012-11-29T18:25:50.020 回答