【问题标题】:Cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'无法访问在类“std::basic_ios<_Elem,_Traits>”中声明的私有成员
【发布时间】:2011-08-23 09:54:26
【问题描述】:

这个特定方法有问题,不知道如何解决!我得到的错误是上面的:

“错误 C2248:'std::basic_ios<_elem>::basic_ios':不能 访问类中声明的私有成员 'std::basic_ios<_elem>' C:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream 604"

我的方法是:

ostream operator<<( ostream & stream, ProcessClass const & rhs )
{
  stream << rhs.name_;
  return stream;
}

在标题中:

friend std::ostream operator<<( std::ostream & stream, ProcessClass const & rhs );

关于如何解决这个问题的任何想法?我认为这与通过引用而不是值传递有关......但我有点困惑!

【问题讨论】:

    标签: c++ visual-studio-2010 compiler-errors


    【解决方案1】:

    返回类型应该是ostream &amp;,它是对ostream的引用。

    ostream & operator<<( ostream & stream, ProcessClass const & rhs )
    {    //^^^ note this!
      stream << rhs.name_;
      return stream;
    }
    

    当您通过 value(而不是 reference)返回时,则需要复制流对象,但需要复制 any 中的流对象通过制作复制构造函数1private,C++ 已禁用

    1.以及复制分配。

    要了解为什么禁止复制 any 流,请在此处阅读我的详细答案:

    【讨论】:

    • 现在令人困惑的是(我不确定我错过了什么)是当我将它更改为上面时(我之前尝试过)然后我得到一个错误......error C2556: 'std::ostream &amp;operator &lt;&lt;(std::ostream &amp;,const ProcessClass &amp;)' : overloaded function differs only by return type from 'std::ostream operator &lt;&lt;(std::ostream &amp;,const ProcessClass &amp;)'注意。我稍微修改了代码,但是按照上面的代码,编译时都会产生错误。
    • @Fids:你在课堂上定义了两次。为什么要定义两次?
    【解决方案2】:

    你不能复制流,而是返回一个引用,改为

    ostream& operator<<( ostream & stream, ProcessClass const & rhs )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2017-04-20
      相关资源
      最近更新 更多