2016-06-30 1 views
3

J'ai vu d'autres questions comme celle-ci mais je n'ai pas eu de solution. Voici le code:Ami ostream ne peut pas accéder au membre privé

cout_overload.h:

#ifndef COUT_OVERLOAD_H_ 
#define COUT_OVERLOAD_H_ 

      #include <iostream> 

      class A 
      { 
        private: 
          int data; 
        public: 
          A(int d); 
          friend std::ostream & operator << 
          (std::ostream os, const A &t); 
      }; 

#endif 

cout_overload_r.cpp:

#include <iostream>                  
    #include "cout_overload.h" 

    A::A(int d) 
    { 
      data = d; 
    } 

    std::ostream &operator << (std::ostream &os, const A&t) 
    { 
      os << " t = " << t.data ; 
      return os; 
    }  

main.cpp:

#include <iostream>                  #include "cout_overload.h" 

int main(void) 
    { 
      A ra(1); 
      using std::cout; 

    //  cout<<ra; 

     return 0; 
} 

l'erreur lors de la compilation: enter image description here

+3

'std :: ostream' et' std :: ostream & 'ne sont pas les mêmes. – songyuanyao

+0

Bon spot @songyuanyao – Neil

Répondre

3

Vous devez modifier votre fonction friend et utilisation ostream& à l'intérieur du

friend std::ostream & operator << (std::ostream os, const A &t); 

Et remplacer votre ligne ci-dessus,

friend std::ostream & operator << (std::ostream &os, const A &t); 

Parce que ostream est un flux de sortie, le & est de passer par référence (le seul moyen de passer les flux aux fonctions) ..