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 )
精彩评论