6

来自 C++ 新手的另一个问题。

我收到以下代码块的编译器错误“'operator==' 不匹配”

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.";
}

有任何想法吗?

4

3 回答 3

17

编译器不知道两个玩家相同意味着什么。如果它们的名字相同,它们是否相同?还是他们的身份证?您需要为class Player.

bool operator == (const Player &p1, const Player &p2)
{
   if( / * evaluate their equality */)
     return true;
   else
     return false;
}

另外,我认为您的swap()功能现在没有任何效果。您可能希望将其更改为通过引用接受Teams 和s。Player

于 2012-04-13T22:23:46.683 回答
5

您需要为您的 Player 类“重载” == 运算符。在其他情况下,您需要告诉编译器要在 Player 对象中比较什么。

例子 :

bool MyClass::operator==(const MyClass &other) const { ... // Compare the values, and return a bool result. }

可能对您有所帮助:运算符重载

问候, 厄瓦尔德

于 2012-04-13T22:26:45.187 回答
2

问题在这里:

if(new_t1[i] == p1){

编译器不知道如何比较两个Player对象,除非您通过实现operator==. 请参阅本指南的“比较运算符”部分。

于 2012-04-13T22:24:04.140 回答