c++ - 好友ostream无法访问私有(private)成员(member)

标签 c++ operator-overloading iostream

我看到过其他类似的问题,但我没有得到解决方案。 代码如下:

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

主要.cpp:

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

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

  //      cout<<ra;

         return 0;
 }

编译时的错误: enter image description here

最佳答案

你需要修改你的friend函数并在

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

并替换上面的行,

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

因为 ostream 是一个输出流,所以 & 是通过引用传递(将流传递给函数的唯一方法)..

关于c++ - 好友ostream无法访问私有(private)成员(member),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117324/

相关文章:

c++ - 在键盘输入期间测试事件标志

C++ 运算符 [] 重载 SNAFU

c++ - 如何从模板化流运算符中调用标准流运算符?

c++ - 为什么std::getline()在格式化提取后会跳过输入?

c++ - 将依赖的模板类加为好友

c++ - 了解 Caffe 中的输入维度、SoftmaxWithLoss 和标签

c++ - 双印不失精度

C++ 抽象基类后缀运算符

types - Ada:子类型转换或调用“Base”

c++ - std::copy raw data to cout in hex format using ostream_iterator<uint8_t> 打印出未格式化的数据。为什么?