按照这个答案中给出的建议,我+
在我的简单类中重载了运算符,Point
如下所示(+= 重载工作正常)。
Point operator+ (Point p1, const Point& p2)
{
return std::move(p1 += p2);
}
但我得到一个错误说
重载的 'operator+' 必须是一元或二元运算符(有 3 个参数)
怎么了?
按照这个答案中给出的建议,我+
在我的简单类中重载了运算符,Point
如下所示(+= 重载工作正常)。
Point operator+ (Point p1, const Point& p2)
{
return std::move(p1 += p2);
}
但我得到一个错误说
重载的 'operator+' 必须是一元或二元运算符(有 3 个参数)
怎么了?
听起来您已将运算符声明为成员函数。成员函数采用隐式第一个参数,这意味着您的运算符现在采用三个参数。您可以通过使其成为非成员函数来解决此问题。
在任何情况下,最好将其声明为 non-member,以确保操作的 LHS 和 RHS 之间的对称性。
至于std::move
,它在<utility>
标题中。虽然我看不到在这里使用它的原因。
您想要执行以下任一操作:
// Member function, performs (*this + right)
Point operator+ (Point & right)
或者
// Free function, performs (left + right)
Point operator+ (const Point &left, const Point& right)
您使运算符成为成员函数,这意味着当您包含隐式第一个参数时,它实际上具有三个this
参数。
任何一个:
*this
而不是p1
去掉第一个参数,或者