2012-04-13 17 views
4

C++初心者のもう1つの質問です。'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

答えて

13

コンパイラは、2人のプレイヤーが同じものであることが何を意味するのか分かりません。彼らの名前が同じであれば同じですか?またはそのIDですか? class Playerに==演算子を定義する必要があります。

また、あなたのswap()機能は今のところ効果がないと思います。参考にしてTeamPlayerを受け入れるように変更したい場合があります。

+1

'const'は空き関数では不正です。 – ildjarn

+0

nullかどうかをチェックしたい場合 –

2

問題はここにある:

if(new_t1[i] == p1){ 

明示的operator==を実装することによって、それを教えてくれない限り、コンパイラは、2つのPlayerオブジェクトを比較する方法を知りません。 this guideの「比較演算子」セクションを参照してください。

4

Playerクラスに==演算子を "オーバーロード"する必要があります。他の場合は、コンパイラにPlayerオブジェクト内の比較対象を伝える必要があります。

例:

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

はあなたを助けるかもしれない:Operator Overload

よろしく、 Erwald

関連する問題