开发者

Cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

Having an issue with this particular method and not sure how to resolve it! The error I'm getting is the above:

"error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' C:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream 604"

My method is:

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

And in the header:

friend std::ostream op开发者_JS百科erator<<( std::ostream & stream, ProcessClass const & rhs );

Any ideas on how to resolve this? I think it is something to do with passing by reference instead of value... but I'm a bit confused!


The return type should be ostream & which is a reference to ostream.

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

When you return by value (instead of reference), then that requires copying of stream object, but copying of any stream object in C++ has been disabled by having made the copy-constructor1 private.

1. and copy-assignment as well.

To know why copying of any stream has been disabled, read my detail answer here:

  • Why copying stringstream is not allowed?


You cannot copy streams, instead return a reference, change to

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜