2012-12-10 105 views
0

我有以下等於運營商:C++等於運算

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...它在"."下放一條紅線,並說:'錯誤:指向綁定函數的指針只能用於調用函數。

任何意見,將不勝感激。謝謝。

+1

第二個版本是正確的,它應該工作。你能在ideone.com上發佈一個最簡單的例子嗎? –

+1

錯誤信息是因爲如果'getHours'是一種方法,則必須具有'x.getHours()'。 –

+0

顯示持續時間等級... – neagoegab

回答

7

第一個實現將只返回true,如果x.secs == y.secs。前兩次比較的結果將被丟棄。 ,運算符評估爲其第二個操作數的值,在這種情況下,該操作數歸結爲x.secs == y.secs

然而,第二個是正確的。如果它不起作用,那麼您必須在Duration的構造函數中錯誤地設置hrs,minssecs的值。

您使用getHours時遇到的問題是您需要調用它。畢竟它是一個成員函數。所以做x.getHours()而不是x.getHours

+0

這是我的問題(忘了給它添加'()')。謝謝你解釋它。一旦它允許我,我將立即標記正確。乾杯。 – binary101

+0

@qwertyRocker,那麼誤報有什麼問題? – chris

+0

@chris問題與Sftrabbit所述完全相同。我使用'x.sec',它總是返回true,當我嘗試'x。getSecs'it不會編譯。我錯過了'()',我應該使用'x.getSecs()'。由於將它們更改爲正確的方法名稱,它的工作原理如下:D – binary101

6

第一個錯誤。 ,不會這樣工作。

第二個是正確的,假設Duration是合理的。

您的Duration構造函數中可能有一個錯誤。我甚至認爲這很可能。