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

コンパイラは、2 つのプレーヤーが同じであるという意味を認識していません。名前が同じなら同じですか?それともID?に対して == 演算子を定義する必要があります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を実装して明示的に指示しない限り、コンパイラは 2 つのオブジェクトを比較する方法を知りませんoperator==このガイドの「比較演算子」セクションを参照してください。

于 2012-04-13T22:24:04.140 に答える