重载运算符==抱怨'must take exactly one argument'
overloading operator== complaining of 'must take exactly one argument'
我正在尝试重载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;}
作为成员运算符重载,它应该只接受一个参数,另一个是this
。
class Foo
{
int a;
public:
bool operator==(const Foo & foo);
};
//...
bool Foo::operator==(const Foo & foo)
{
return a == foo.a;
}
你应该把你的运算符==从有理数到其他地方。由于它是在类中声明的,因此认为"this"是第一个参数。从语义可以看出,您向编译器提供了 3 个参数。
friend bool operator==( Rationalnumber l, Rationalnumber r );
当您将其声明为非成员函数时,它可以接受两个参数。当您将其声明为成员函数时,它只能接受一个参数。
相关文章:
- QT C++如何调用lambda one
- 为什么'allocate in one library and free in the other'是错误的
- C++ WinRT - XAudio2是否支持Xbox One平台
- 为什么我收到错误:"there is more than one default constructor"?
- g++ 在我尝试用 ONE LINE 编译程序时崩溃了
- 在 ONE 设置中添加附加包含目录并引用 => 指向静态库
- 为什么海湾合作委员会声称我违反了"at least one argument for variadic macro",而我至少有一个论点?
- "State pattern" vs "one member function per state" ?
- 编译时"one or more multiply defined symbols found"错误
- 如何在QxORM中定义具有多个主键的表,其中一个主键是与另一个表的"many to one"关系
- VS 编译器错误 C2752 ( "more than one partial specialization matches" ) 在 STL 中
- one.cpp和two.cpp都包含两个.h
- 调用了基运算符而不是派生的one-Normal行为
- 如何使用多个 SVM 分类器(每个分类器都有一个特定的内核)作为"one vs rest classification"方案?
- 什么是"one-stop memory corruption"?
- 重载运算符==抱怨'must take exactly one argument'
- 尝试创建流的错误日志 - 获取"one or more multiply defined symbols found"
- 在基本游戏中LNK1169 "one or more multiply defined symbols found"
- 预处理器:"The definition also permits you to split an identifier at any position and get exactly two tok
- 需要"one"对象,如何使用"new"