2013-04-03 110 views
4

這裏是我的類:重載<<操作錯誤C2804:二進制「操作符<<」有太多的參數

#ifndef CLOCK_H 
#define CLOCK_H 
using namespace std; 

class Clock 
{ 
    //Member Variables 

    private: int hours, minutes; 

    void fixTime(); 

    public: 
     //Getter & settor methods. 
     void setHours(int hrs); 
     int getHours() const; 
     void setMinutes(int mins); 
     int getMinutes() const; 

     //Constructors 
     Clock(); 
     Clock(int); 
     Clock(int, int); 
     //Copy Constructor 
     Clock(const Clock &obj); 
     //Overloaded operator functions 
     void operator+(const Clock &hours); 
     void operator+(int mins); 
     void operator-(const Clock &hours); 
     void operator-(int minutes1); 
     ostream &operator<<(ostream &out, Clock &clockObj); //This however is my problem where i get the error C2804. Saying that it has to many parameters 
}; 
#endif 

所有這些功能是應該做的是從一個時鐘的值在不同的時間。

+0

它有三個參數。它應該有兩個。 – chris

+0

爲了將來的參考,請在發佈代碼塊時不要使用代碼高亮反引號。這裏有一個單獨的按鈕(或者你簡單地用4個空格縮進每一行) – paddy

回答

15
ostream &operator<<(ostream &out, Clock &clockObj); 

應該是

friend ostream &operator<<(ostream& out, Clock &clockObj);  

OUTSIDE的類中定義。

在這裏看到:Should operator<< be implemented as a friend or as a member function?

+0

Dude,非常感謝你 – varrick

+0

@ user2238554不客氣:-) –

+0

大部分是正確的,但它沒有_have_被定義在外面的類。 –

10
ostream &operator<<(ostream &out, Clock &clockObj); 

應該

friend ostream &operator<<(ostream &out, Clock &clockObj); 

根據Stanley等的C++入門(第四版第514):

當我們定義的輸入或輸出運算符符合iostream庫的約定 ,我們必須使它成爲非會員 運營商。我們不能讓運營商成爲我們班的成員。如果我們 做,那麼左側操作數必須是我們的 類類型

因此的一個對象,它是重載<<>>作爲類的友元函數很好的做法。

+0

哇..非常感謝。我可能看起來很愚蠢。再次感謝你。 – varrick

+0

@ user2238554歡迎光臨 – taocp