重载'operator +'必须是一元或二元运算符错误

lea*_*vst 14 c++ operator-overloading c++11

按照这个答案给出的建议,我+在我的简单Point类中重载了运算符如下(+ =重载工作正常).

Point operator+ (Point p1, const Point& p2)
{
    return std::move(p1 += p2);
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说

重载'operator +'必须是一元或二元运算符(有3个参数)

怎么了?

Dre*_*ann 14

你想要做任何一件事:

// Perform (*this + right)
Point operator+ (Point & right)
Run Code Online (Sandbox Code Playgroud)

要么

// Perform (left + right)  Friend functions have no "this".
friend Point operator+ (const Point &left, const Point& right)
Run Code Online (Sandbox Code Playgroud)

  • @LightnessRacesinOrbit a hack所以你可以在类声明中声明函数:-)与友谊无关. (3认同)
  • 我必须补充一点,我认为这里根本不需要“朋友”,这只是令人困惑。此外,签名更改在这里很重要。 (2认同)

jua*_*nza 13

听起来您已将您的运营商声明为会员功能.成员函数采用隐式的第一个参数,这意味着您的运算符现在需要三个参数.您可以通过使其成为非成员函数来解决此问题.

在任何情况下,最好将其声明为非成员,以确保LHS与操作的RHS之间的对称性.

至于std::move,它在<utility>标题中.虽然我看不出在这里使用它的原因.

  • 好吧,运算符可以是成员,但在这种情况下,隐式传递的对象已经算作一个参数. (2认同)