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

时间:2012-11-25 18:57:14

标签: c++ c++11 operator-overloading

根据建议given in this answer,我在我的简单+类中重载了Point运算符,如下所示(+ =重载正常)。

Point operator+ (Point p1, const Point& p2)
{
    return std::move(p1 += p2);
}

但我收到错误

  

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

有什么问题?

3 个答案:

答案 0 :(得分:14)

你想要做任何一件事:

// Perform (*this + right)
Point operator+ (Point & right)

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

答案 1 :(得分:13)

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

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

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

答案 2 :(得分:2)

您使运算符成为成员函数,这意味着当您包含隐式的第一个this参数时,它实际上有三个参数。

或者:

  • 使用*this而不是p1并删除第一个参数,或
  • 让操作符重载自由函数(而不是成员) - 这是首选。