2013-03-11 1 views
3

J'ai lu Should operator<< be implemented as a friend or as a member function? et Overloading Insertion Operator in C++, ressemble à un problème similaire, mais n'a pas résolu mon propre problème.classe n'a pas de membre "opérateur <<"

Mon fichier d'en-tête:

using namespace std; 

class Animal { 
private: 
    friend ostream & operator<< (ostream & o, Dog & d); 
    int number; 
public: 
    Animal(int i); 
    int getnumber(); 

}; 

ostream & operator<< (ostream & o, Dog & d); 

Mon cpp:

using namespace std; 

int Animal::getnumber(){ 
    return number; 
} 

ostream & Animal::operator<< (ostream & o, Dog & d){ 
    //... 
} 

Animal::Animal(int i) : number(i){} 

La mise en œuvre est simple, mais je reçois l'erreur: en cpp - Erreur: classe de classe "Animal" n'a aucun membre "opérateur < <". Je ne comprends pas vraiment parce que j'ai déjà déclaré l'opérateur d'insertion comme ami dans Animal, pourquoi ai-je encore cette erreur? (mettre l'ostream en public n'aide pas)

Répondre

6

Ce n'est pas un membre de la classe Animal, il ne devrait pas l'être. Donc, ne le définissez pas comme un. Définissez-le comme une fonction gratuite en supprimant le préfixe Animal::.

ostream & operator<< (ostream & o, Dog & d){ 
    //... 
} 
+0

Si vous ne voulez pas faire 'l'opérateur <<' fonction ami, faites-le déléguer à une fonction de membre (éventuellement virtuel): 'ostream & operator << (ostream & o, Dog & d) {d. print_to_stream (o); } ' – sfstewman