我正在尝试重载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;}

08-06 14:37