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

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

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

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

但我收到一个错误提示

overloaded 'operator+' must be a unary or binary operator (has 3 parameters)

怎么了?

最佳答案

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

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

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

关于c++ - 重载 'operator+' 必须是一元或二元运算符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13554320/

相关文章:

c++ - stdlib 中的 _countof 损坏 : why?

c++ - 调用静态内联函数

c++ - c++中隐藏特定函数的一种方法

c++ - 为什么 map 插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多

c++ - 如何从 Qt Creator 保存和导出自定义构建步骤?

c++ - 将 char 数组传递给函数模板,以便 gcc 可以知道它是文字?

java - + Java 中字符串的运算符

c++ - 基类中运算符重载的问题

c++ - 为什么在 C++ 中重载二元算术运算符的规范实现按值传递第一个论证?

c++ - 使用 `-> decltype` 推断返回类型