2013-04-03 3 views
4

Voici ma classe:Surcharger l'erreur opérateur << C2804: « opérateur << » binaire a trop de paramètres

#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 

Toute cette fonction est censée faire est les valeurs d'une horloge à différents moments .

+0

Il a trois paramètres. Il devrait en avoir deux. – chris

+0

Pour référence ultérieure, n'utilisez pas les guillemets mettant en surbrillance le code lorsque vous publiez un bloc de code. Il y a un bouton séparé pour cela (ou vous indiquez simplement chaque ligne avec 4 espaces) – paddy

Répondre

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

devrait être

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

dehors de la classe.

Voir ici: Should operator<< be implemented as a friend or as a member function?

+0

Mec, merci beaucoup – varrick

+0

@ user2238554 de rien :-) –

+0

Surtout bon, mais il n'a pas _have_ être défini à l'extérieur de la classe. –

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

devrait être

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

Selon Stanley et al de C++ Primaire (quatrième pp édition 514):

Lorsque nous définissons une entrée ou l'opérateur de sortie qui est conforme aux conventions de la bibliothèque iostream, nous devons en faire un opérateur non membre . Nous ne pouvons pas faire de l'opérateur un membre de notre propre classe. Si nous avons fait , l'opØrande gauche devrait être un objet de notre type de classe

Par conséquent, il est bon de surcharger << et >> comme des fonctions amies de la classe.

+0

Wow .. Merci beaucoup. J'ai probablement l'air vraiment stupide. Merci encore. – varrick

+0

@ user2238554 vous êtes les bienvenus – taocp