Не удается получить доступ к закрытому члену, объявленному в классе 'std:: basic_ios <_Elem, _Traits>'
Имея проблему с этим конкретным методом и не уверен, как его решить! Ошибка, которую я получаю, выше:
"ошибка C2248: 'std:: basic_ios < _Elem, _Traits > :: basic_ios': can not доступ к закрытому члену, объявленному в классе '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 );
Любые идеи о том, как разрешить это? Я думаю, что это связано с передачей по ссылке вместо ценности... но я немного смущен!
Ответы
Ответ 1
Тип возврата должен быть ostream &
, который является ссылкой на ostream
.
ostream & operator<<( ostream & stream, ProcessClass const & rhs )
{ //^^^ note this!
stream << rhs.name_;
return stream;
}
Когда вы возвращаетесь по значению (вместо ссылки), тогда для этого требуется копирование объекта потока, но копирование объекта потока any в С++ отключено, сделав конструктор-копию 1private
.
1. и копирование.
Чтобы узнать, почему копирование потока any отключено, прочитайте мой подробный ответ здесь:
Ответ 2
Вы не можете копировать потоки, вместо этого возвращать ссылку, изменить на
ostream& operator<<( ostream & stream, ProcessClass const & rhs )