2016-06-30 5 views
3

Я видел другие вопросы, как это, но я не получил решения. Вот код:Друг ostream не может получить доступ к закрытому члену

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

ошибка во время компиляции: enter image description here

+3

'std :: ostream' и' std :: ostream & 'не то же самое. – songyuanyao

+0

Хорошее место @songyuanyao – Neil

ответ

3

Вы должны изменить свою friend функцию и использовать ostream& внутри

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

И заменить выше линию,

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

Поскольку ostream является выходным потоком, то & должны пройти по ссылке (единственный способ передать потоки в функции).