2

単純な配列で同等性をチェックするために、私は次のことをしました;

int a[4] = {9,10,11,20};
    if(a[3]== 20){
        cout <<"yes"<< endl;
    }

ただし、型クラスの配列を作成し、等価性をチェックしようとすると、エラーが発生します。

Human は、名前、年齢、性別などのプライベート変数と、これらの変数の get および set 関数を持つクラスです。

humanArray のサイズは 20 です

void Animal::allocate(Human h){
    for (int i =0; i<20; i++){
        if(humanArray[i] == h){
            for(int j = i; j<size; j++){
                humanArray[j] = humanArray[j +1];
            }
        }
    }
}

次のエラーが発生します。

error: no match for 'operator==' in '((Animal*)this)->Animal::humanArray[i] == h'|

インデックスと人間を渡して、インデックス番号と照合することができました。ただし、2 つの要素が同じかどうかを確認する方法はありますか? 一部の部分で私の人間には名前がないため、人間の名前に対して「人間の名前」と言うのをチェックしたくありません。

4

2 に答える 2

6

構文を作るために

if(humanArray[i] == h)

operator==法的には、人間のクラスを定義する必要があります。これを行うには、次のような関数を作成します。

bool operator== (const Human& lhs, const Human& rhs) {
   /* ... */
}

lhsこの関数内で、とをフィールドごとに比較しrhsて、それらが等しいかどうかを確認します。これ以降、演算子を使用して任意の 2 人の人間を比較しようとすると==、C++ は自動的にこの関数を呼び出して比較を行います。

お役に立てれば!

于 2012-04-08T19:55:40.257 に答える
0

operator==クラス Humanの をオーバーロードする必要があります

bool operator== (const Human& left, const Human& right)
{
// perform comparison by each element in the class Human
}
于 2012-04-08T19:57:31.757 に答える