我对C ++很新,并试图重载<班上的操作员。
在我的头文件中,我有:
friend bool operator<(const Tweet& a, const Tweet& b);
在类文件中我有:
inline bool Tweet::operator<(const Tweet& a, const Tweet& b) {
return (a.getID() < b.getID());
}
目前我收到错误‘bool Tweet::operator<(const Tweet&, const Tweet&)’ must take exactly one argument
删除Tweet::
会将错误更改为未定义的引用并删除第二个参数会将错误更改为“必须使用两个参数”
PS - 我尝试过Operator overloading中的相应部分以及一些相关问题,但后来我遇到了各种不同的错误。
答案 0 :(得分:1)
嗯,你宣布一个独立的函数成为朋友,然后定义一个类成员函数作为比较。这不完全正确。
如果定义具有两个参数的比较运算符,则必须将其声明为static:
static bool Tweet::operator<(const Tweet& a, const Tweet& b) {
return (a.getID() < b.getID());
}
这种方式a < b
被解释为Tweet::operator<(a, b);
。
如果没有static
,则会隐含3个参数:*this
,a
和b
。
或者,您可以定义一个实例运算符,接受一个参数并将其与当前实例进行比较:
bool Tweet::operator<(const Tweet& b) {
return (getID() < b.getID());
}
这种方式a < b
被解释为a.operator<(b);
。
或者,您可以定义一个独立的功能(这是您实际需要的地方friend
):
bool operator<(const Tweet& a, const Tweet& b) {
return (a.getID() < b.getID());
}
这种方式a < b
被解释为operator<(a, b);
。
无论哪种方式都很好。