2011-08-23 20 views
10

¡Tiene un problema con este método particular y no está seguro de cómo resolverlo! El error que estoy recibiendo es lo anterior:No se puede acceder al miembro privado declarado en la clase 'std :: basic_ios <_Elem, _Traits>'

"C2248 de error: 'std :: basic_ios < _Elem, _Traits> :: basic_ios': no ​​puede miembro privado de acceso declarado en la clase 'std :: basic_ios < _Elem, _Traits>' C: \ archivos de programa \ Microsoft Visual Studio 10,0 \ VC \ include ostream 604" \

Mi método es:

ostream operator<<(ostream & stream, ProcessClass const & rhs) 
{ 
    stream << rhs.name_; 
    return stream; 
} 

Y en la cabecera:

friend std::ostream operator<<(std::ostream & stream, ProcessClass const & rhs); 

¿Alguna idea sobre cómo resolver esto? Creo que tiene algo que ver con pasar por referencia en lugar de valor ... ¡pero estoy un poco confundido!

Respuesta

12

El tipo de devolución debe ser ostream & que es una referencia a ostream.

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

Cuando regresa por valor (en lugar de referencia), entonces eso requiere la copia del objeto de secuencia, pero la copia de cualquier objeto corriente en C++ ha sido discapacitados por haber hecho la copia -constructor private.

1. y asignación de copias también.

saber por qué la copia de cualquier corriente ha sido desactivado, leer mi equipo de respuesta aquí:

+0

Ahora lo confuso es (y no estoy seguro de lo que me falta) es cuando c colgarlo en la parte superior (que había probado antes) Entonces aparece un error ... 'error C2556: 'std :: ostream & operator << (std :: ostream &, const ProcessClass &)': la función sobrecargada difiere solo por el tipo de devolución del operador 'std :: ostream << (std :: ostream &, const ProcessClass &)' ' NB. He modificado ligeramente el código, pero sigo el código anterior, el error se produce de cualquier manera en la compilación. – Fids

+1

@ Fids: has definido dos veces en tu clase. ¿Por qué lo has definido dos veces? – Nawaz

4

No es posible copiar corrientes, en lugar devolver una referencia, el cambio a

ostream& operator<<(ostream & stream, ProcessClass const & rhs) 
Cuestiones relacionadas