无法访问类'std :: basic_ios< _Elem,_Traits>'中声明的私有成员

时间:2011-08-23 09:54:26

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

遇到此特定方法的问题而不确定如何解决它!我得到的错误是上面的:

  

“错误C2248:'std :: basic_ios< _Elem,_Traits> :: basic_ios':不能   访问类中声明的私有成员   '的std :: basic_ios< _Elem,_Traits>' 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 );

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

2 个答案:

答案 0 :(得分:12)

返回类型应为ostream &,这是对ostream的引用。

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

当您通过 value (而不是 reference )返回时,则需要复制流对象,但复制任何流对象通过创建复制构造函数 1 private,C ++已被禁用

1。和复制作业。功能

要知道为何禁用任何流的复制,请在此处阅读我的详细解答:

答案 1 :(得分:4)

您无法复制流,而是返回引用,更改为

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