来自C ++新手的另一个问题。
对于以下代码块,我收到编译器错误“不匹配'运算符=='”
void swap(Team t1, Player p1, Team t2, Player p2){
Player new_t1[11];
Player new_t2[11];
for(int i=0; i<11; i++){
new_t1[i] = t1.get_player(i);
new_t2[i] = t2.get_player(i);
if(new_t1[i] == p1){
new_t1[i] = p2;
}
if(new_t2[i] == p2){
new_t2[i] = p1;
}
}
cout << "Players swapped.";
}
有什么想法吗?
答案 0 :(得分:13)
编译器不知道这两个玩家的含义是什么。如果他们的名字相同,他们是否相同?还是他们的ID?您需要为class Player
定义==运算符。
bool operator == (const Player &p1, const Player &p2)
{
if( / * evaluate their equality */)
return true;
else
return false;
}
另外,我认为您的swap()
功能现在没有任何效果。您可能希望将其更改为通过引用接受Team
和Player
。
答案 1 :(得分:4)
您需要为您的Player类“重载”==运算符。在其他情况下,您需要告诉编译器在您的Player对象中要比较什么。
示例:
bool MyClass::operator==(const MyClass &other) const {
... // Compare the values, and return a bool result.
}
可以帮助你:Operator Overload
此致 Erwald
答案 2 :(得分:2)