我有一个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的成员。
答案 0 :(得分:5)
答案 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-() {...}