0

私は次のequals演算子を持っています:

  bool operator==(const Duration& x, const Duration& y){
        return ( x.hrs == y.hrs, x.mins == y.mins, x.secs == y.secs );
    }

私も試しました:

 bool operator==(const Duration& x, const Duration& y){
        return ( (x.hrs == y.hrs) && (x.mins == y.mins) && (x.secs == y.secs) );
    }

私の主な方法では、次のようになります。

  //Arbitrary Durations - Testing
    Duration dTest0 (01,45,12);
    Duration dTest1 (01,35,45);
    Duration dTest2 (01,35,45);
    Duration dTest3 (01,25,05);

    if ( dTest0 == dTest1 ){
        cout<< "broken" << endl;
    }
    else{
        cout<< "working" << endl;
        }

私のプログラムは「壊れた」を出力し続けます。これは、dTest0とdTest1が実際には等しいことを示唆しています...どこが間違っているのでしょうか。

追加:使用する場合x.getHours == y.getHours...それは下に赤い線を置き、"."次のように言います:'エラー:バインドされた関数へのポインターは、関数を呼び出すためにのみ使用できます`。

何かアドバイスをいただければ幸いです。ありがとう。

4

2 に答える 2

7

最初の実装は、の場合にのみtrueを返しますx.secs == y.secs。最初の2つの比較の結果は破棄されます。,演算子は、その2番目のオペランドの値を評価します。この場合、この値は、単純に。になりx.secs == y.secsます。

ただし、2番目は正しいです。動作しない場合は、のコンストラクターで、、の値を誤って設定している必要hrsminsありsecsますDuration

あなたが抱えている問題getHoursは、あなたがそれを呼ぶ必要があるということです。やっぱりメンバー関数です。したがって、x.getHours()の代わりに行いx.getHoursます。

于 2012-12-10T15:57:25.103 に答える
6

最初のものは間違っています。 ,そのようには機能しません。

Duration合理的であると仮定すると、2番目のものは正しいです。

Durationコンストラクターにバグがある可能性があります。ありそうだと思います。

于 2012-12-10T15:53:10.953 に答える