Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 operator<<( 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!

like image 673
Fids Avatar asked Aug 23 '11 09:08

Fids


1 Answers

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-constructor1private.

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?
like image 188
Nawaz Avatar answered Sep 23 '22 04:09

Nawaz