重载比较运算符

时间:2012-08-19 20:47:56

标签: c++ operator-overloading

我对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中的相应部分以及一些相关问题,但后来我遇到了各种不同的错误。

1 个答案:

答案 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个参数:*thisab

或者,您可以定义一个实例运算符,接受一个参数并将其与当前实例进行比较:

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);

无论哪种方式都很好。