1

我对 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 - 我已经尝试按照运算符重载中的相应部分以及一些相关问题进行操作,但后来我得到了各种不同的错误。

4

1 回答 1

1

好吧,您将一个独立函数声明为友元,然后定义一个类成员函数作为比较。这并不完全正确。

如果定义具有两个参数的比较运算符,则必须将其声明为静态:

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

无论哪种方式都很好。

于 2012-08-19T20:49:26.940 回答