Autore Topic: Aiuto!  (Letto 467 volte)

SoraPride

  • Visitatore
Aiuto!
« il: Ottobre 20, 2010, 04:20:18 pm »
Vorrei dichiarare un accessor a un oggetto membro, ma ho problemi a renderlo const come di fatto è. Mi spiego:

Codice: [Seleziona]
Letter& Literal::get (int i) const {

   return lit_m.at (i); //Vector di oggetti
}
Di fatto tale funzione non modifica l'oggetto, ma deve ritornare un riferimento a non-const in modo che una funzione esterna possa modificare eventualmente l'oggetto lit_m.at (i). Al compilatore non va giù che una funzione dichiarata const ritorni un riferimento non-const di un oggetto membro (eventualmente const), infatti:
Codice: [Seleziona]
glaedr-gnome@glaedr-desktop:~/expressions-cpp$ make
g++ -o literal.o -c literal.cpp
literal.cpp: In member function ‘Letter& Literal::get(int) const’:
literal.cpp:34: error: invalid initialization of reference of type ‘Letter&’ from expression of type ‘const Letter’
make: *** [literal.o] Errore 1
 >:( >:(

Qualcuno sa come fare? Mi sono persino andato a guardare l'at () dell'header stl_vector in cerca di aiuto, ma non ci ho capito niente.