根据建议given in this answer,我在我的简单+
类中重载了Point
运算符,如下所示(+ =重载正常)。
Point operator+ (Point p1, const Point& p2)
{
return std::move(p1 += p2);
}
但我收到错误
重载'operator +'必须是一元或二元运算符(有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
并删除第一个参数,或