2012-04-13 96 views
4

來自C++新手的另一個問題。'operator =='不匹配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."; 
} 

任何想法以下塊?

+4

你有沒有實現的'運營商=='功能'Player'類? – littleadv 2012-04-13 22:22:15

回答

13

編譯器不知道這兩個玩家是一樣的意思。如果他們的名字相同,他們是否一樣?或他們的ID?您需要爲class Player定義==運算符。

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

另外,我不認爲你的swap()功能有什麼影響現在。您可能需要將其更改爲通過引用接受Team s和Player s。

+1

'const'在一個自由函數中是非法的。 – ildjarn 2012-04-13 22:27:04

+0

如果我們只想檢查它是否爲null,該怎麼辦 – 2017-05-04 14:01:49

2

的問題是在這裏:

if(new_t1[i] == p1){ 

編譯器不知道如何比較兩個Player對象,除非你明確告訴它通過實現operator==。請參閱this guide的「比較運算符」部分。

4

您需要爲您的Player類「重載」==運算符。在其他的你需要告訴編譯器在你的Player對象中比較哪些東西。

例子:

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

可以幫助你:Operator Overload

問候, Erwald