Newsgroup: it.comp.lang.c++
Titolo: Problemi di Const T&, e T&

Ho dei problemi con il seguente codice
inline ostream& operator<< ( ostream& a, Sito& h)
{	a << "\ncodice: " << h.codice << "\n";
	a << "nome: " << 
h.name
 << "\n"; 
	a << "superficie: " << h.superficie << "\n"; 
	a << "corrente artistica: " << h.correnteArtistica << "\n"; 
	return a;
}
name, codice , superficie e corrente artistica sono campi privati.
Mi serve trasformare questa funzione e fargli ricevere come parametri
al posto di (ostream&, Sito&) i seguenti e cioe' (ostream& , const Sito& )
questo perche la mia lista mi restituisce il campo info del nodo nel seguente
modo
// parte informativa dell'elemento
	const T& info () const // throws (Nullo,Fine) 
	{	if ( nullo() ) throw Nullo();
		if ( fine() ) throw Fine();
		return pElem()->vInfo;
	}
cioe un const Sito&
alla chiamata di cout<<
ed.info
();
il compilatore (MVC++ 6.0) mi da il seguente errore
c:\programmi\microsoft visual studio\myprojects\provasito\prova.cpp(15) : error
C2679: binary '<<' : no operator defined which takes a right-hand operand of
type 'const class Sito' (or there is no acceptable conversion)
se modifico info() e gli faccio restituire un "T&" al posto di un "const T&"
funziona,pero non voglio mettere patch ma semplicemente lasciare tutto
com'e,magari aggiustare tutto facendo modifiche all'operatore di output <<.
Aiutatemi non so come fare.
Grazie anticipate
-- 
Posted from 
ppp-62-10-173-24.dialup.tiscali.it
 [62.10.173.24] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
Direi che ti basta aggiungere un const della signature di operator<<.
 inline ostream& operator<< ( ostream& a, const Sito& h)
Max

 Max
Max mi spiace ma non funziona,
quando faccio come dici tu alla chiamata dell'operatore <<
cout<<
ed.info
();
il compilatore risponde
c:\programmi\microsoft visual studio\myprojects\provasito\sito.h(55) : error
C2248: 'codice' :
cannot access private member declared in class 'Sito'
soft visual studio\myprojects\provasito\sito.h(56) : error C2248: 'name' : 
cannot access private member declared in class 'Sito'
c:\programmi\microsoft visual studio\myprojects\provasito\sito.h(48) :
 see declaration of 'name'
ual studio\myprojects\provasito\sito.h(57) : error C2248: 'superficie' :
 cannot access private member declared in class 'Sito'
 c:\programmi\microsoft visual studio\myprojects\provasito\sito.h(50) : 
see declaration of 'superficie'
c:\programmi\microsoft visual studio\myprojects\provasito\sito.h(58) : 
error C2248: 'correnteArtistica' : cannot access private member declared in
class 'Sito'
c:\programmi\microsoft visual studio\myprojects\provasito\sito.h(49) : 
see declaration of 'correnteArtistica'
Non va cosi
TI PREGO AIUTO
-- 
Posted from 
ppp-62-10-171-182.dialup.tiscali.it
 [62.10.171.182] 


 cannot access private member declared in class 'Sito'
Dichiara operator<< friend di Sito, oppure (meglio) sposta l'attuale
implementazione di operator<< in una funzione membro di Sito, ad es:
   std::ostram&  Sito::emit( std::ostream& out ) ;
e reimplementa operator<< con una chiamata a Sito::emit():
  inline ostream& operator<< ( ostream& a, const Sito& h)
    { return h.emit(a); }
Max

 
Intendevo:
    std::ostream&  Sito::emit( std::ostream& out ) const 
Nota il 'const'.
Max