2011-08-23 14 views
10

Avere un problema con questo particolare metodo e non si sa come risolverlo! L'errore che sto ricevendo è il sopra:Impossibile accedere al membro privato dichiarato nella classe 'std :: basic_ios <_Elem, _Traits>'

"C2248 di errore: 'std :: basic_ios < _Elem, _Traits> :: basic_ios': non può membro privato di accesso dichiarato nella classe 'std :: basic_ios < _Elem, _Traits>' C: \ Programmi \ Microsoft Visual Studio 10.0 \ VC \ include \ ostream 604"

il mio metodo è:

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

E nell'intestazione:

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

Qualche idea su come risolvere questo? Penso che sia qualcosa a che fare con il passare per riferimento invece che con il valore ... ma sono un po 'confuso!

risposta

12

Il tipo di reso deve essere ostream & che è un riferimento a ostream.

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

Quando ritorni da valore (invece di riferimento), quindi che richiede la copia di oggetto flusso, ma la copia di qualsiasi oggetto flusso in C++ è stato disabilitato da aver fatto la copia -costruttore private.

1. e copia-assegnazione pure.

sapere perché la copia di qualsiasi flusso è stato disabilitato, leggere il mio particolare risposta qui:

+0

Ora la cosa confusa è (e non sono sicuro di ciò che mi manca) è quando c aggiungo a sopra (cosa che avevo provato prima) poi ho un errore ... 'errore C2556: 'std :: ostream & operatore << (std :: ostream &, const ProcessClass &)': funzione sovraccaricata diversa solo per tipo di ritorno da 'std :: ostream operator << (std :: ostream &, const ProcessClass &)' ' NB. Ho leggermente modificato il codice, ma seguo il codice come sopra, l'errore viene prodotto in entrambi i modi durante la compilazione. – Fids

+1

@Fids: hai definito due volte nella tua classe. Perché l'hai definito due volte? – Nawaz

4

Non è possibile copiare i flussi, anziché restituire un riferimento, passare alla

ostream& operator<<(ostream & stream, ProcessClass const & rhs) 
Problemi correlati