Невозможно получить доступ к закрытому члену, объявленному в классе 'std :: basic_ios <_Elem, _Traits>' - PullRequest
10 голосов
/ 23 августа 2011

Возникла проблема с этим конкретным методом и не знаете, как ее решить!Я получаю следующую ошибку:

"ошибка C2248: 'std :: basic_ios <_Elem, _Traits> :: basic_ios': невозможно получить доступ к закрытому члену, объявленному в классе '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 );

Есть идеи, как решить эту проблему?Я думаю, что это связано с передачей по ссылке, а не по значению ... но я немного запутался!

Ответы [ 2 ]

12 голосов
/ 23 августа 2011

Тип возврата должен быть ostream &, который является ссылкой на ostream.

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

Когда вы возвращаете значение (вместо ссылка ), это требует копирования объекта потока, но копирование любого объекта потока в C ++ было отключил , сделав конструктор копирования 1 private.

1. и копирование-назначение, а также.

Чтобы узнать, почему копирование любого потока было отключено, прочитайте мой подробный ответ здесь:

4 голосов
/ 23 августа 2011

Вы не можете копировать потоки, вместо этого верните ссылку, измените на

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