不匹配'operator =='C ++编译错误

时间:2012-04-13 22:21:12

标签: c++ compiler-errors

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

有什么想法吗?

3 个答案:

答案 0 :(得分:13)

编译器不知道这两个玩家的含义是什么。如果他们的名字相同,他们是否相同?还是他们的ID?您需要为class Player定义==运算符。

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

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

答案 1 :(得分:4)

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

示例:

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

可以帮助你:Operator Overload

此致 Erwald

答案 2 :(得分:2)

问题在于:

if(new_t1[i] == p1){

编译器不知道如何比较两个Player对象,除非您通过实现operator==明确告诉它。请参阅this guide的“比较运算符”部分。