2016-06-30 13 views
3

Ich habe andere Fragen wie diese gesehen, aber ich habe keine Lösung erhalten. Hier ist der Code:Friend Ostream kann nicht auf private Mitglied zugreifen

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; 
} 

der Fehler beim Kompilieren: enter image description here

+3

'std :: ostream' und' std :: ostream & 'ist nicht gleich. – songyuanyao

+0

Guter Ort @songyuanyao – Neil

Antwort

3

Sie benötigen friend Funktion ändern und Verwenden ostream& innerhalb des

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

Und ersetzen Sie oberhalb der Linie,

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

Da ostream ein Ausgangsstrom ist, ist die & durch Verweis übergeben (die einzige Möglichkeit, Streams an Funktionen zu übergeben) ..