-2

我已经定义了一个 Player 类来做一些操作,所以我可以方便地重载一些基本的操作符。具体来说,我想使用 < 来比较 Player 对象。因此,我在课堂上有以下内容:

bool operator<(const Player& rhs) const {return (*this < rhs );} 

不幸的是,这导致了问题。后来,当我尝试在 main 函数中输出包含特定元素的向量时,编译器让我知道 << 操作数不匹配,并且它需要 std::ostream << Player。以下是导致问题的行:

vector<Player> playerVec(6);

for (int i = 0; i < 6; i++) {

cout << playerVec[i];

}

请注意,我实际上并不想将任何 Player 对象直接输出到流中,所以我认为我不需要重载 <<。

我对正在发生的事情有一些了解,因为编译器采用了我对 < 的特定定义,然后不再费心寻找更一般的情况。我的问题是,我现在是否需要重载 << 运算符以返回其一般功能,还是有更简单的解决方案?

感谢您提供的任何帮助!

4

2 回答 2

7

我猜你正在处理两个不同的问题:

1)您丢失了std::ostream& operator<<(std::ostream&, const Player&),这是将Player对象流式传输到std::cout其他输出流所需要的

2)您的Player小于比较运算符中有无限递归<,因为您提供的运算符会调用自己。

于 2013-05-31T22:05:50.853 回答
1

我不认为,你operator<()的干扰。根据您的代码的复杂性,您可以通过简单地注释它并检查您是否收到相同的错误来验证这一点。

您需要指定一个std::ostream & operator<<(std::ostream & os, const Player & p)非成员函数,否则编译器不知道如何编写类似os << myPlayer.

于 2013-05-31T22:06:14.717 回答