c++ - 重载 operator== 提示 'must take exactly one argument'

标签 c++

我试图重载operator==,但编译器抛出以下错误:

‘bool Rationalnumber::operator==(Rationalnumber, Rationalnumber)’ must take exactly one argument

我的一小段代码如下:

bool Rationalnumber::operator==(Rationalnumber l, Rationalnumber r) {
  return l.numerator() * r.denominator() == l.denominator() * r.numerator();
}

声明:

bool operator==( Rationalnumber l, Rationalnumber r );

有人知道为什么会抛出错误吗?

最佳答案

如果 operator== 是一个非静态数据成员,它应该只接受一个参数,因为比较将是隐式的 this 参数:

class Foo {
  bool operator==(const Foo& rhs) const { return true;}
};

如果你想使用自由运算符(即不是类的成员),那么你可以指定两个参数:

class Bar { };
bool operator==(const Bar& lhs, const Bar& rhs) { return true;}

关于c++ - 重载 operator== 提示 'must take exactly one argument',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229074/

相关文章:

c++ - 不同的默认按钮设计行为

c++ - 我怎样才能找到这个数组中的最高值和最低值?

C++线程类从非线程类设计

c++ - SystemParametersInfo 将背景设置为纯色而不是实际设置图片

c++ - 使用 gzip 压缩 POCO HttpResponse 来削减内容

c++ - std::bitset - 如何迭代 "set"(或 "not set")位?

c++ - 一个类没有检测到另一个类的对象

c++ - 部署qt mysql应用程序

C++ 模块 TS 和 CMake

c++ - 如何删除在C++中另一个线程中创建的对象