Не удается получить доступ к закрытому члену, объявленному в классе '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 )