View Full Version : Errore che non capisco. C++
Predator Hunter
20-12-2006, 17:10
Ciao a tutti.. avrei un problemino
CList* NomeClasse::getList() const{
return &lista;
}
lista è un oggetto privato di NomeClasse di tipo CList (non un puntatore)
se il metodo non è const me lo fa fare
in questo caso mi dice
return value type does not match the function type
io voglio che la get sia const per non permettere che questo oggetto sia modificato, inoltre sono obbligato al passaggio per riferimento.
how can i do?
ciao e grazie in anticipo!
ilsensine
20-12-2006, 17:28
Se usi un metodo cost per accedere alla classe, tutti i suoi oggetti sono anch'essi const. Pertanto puoi solo ritornare un const CList *.
Predator Hunter
21-12-2006, 08:04
lo credevo anche io ma
se il metodo invece di essere
CList* NomeClasse::getList() const{
return &lista;
}
è
CList NomeClasse::getList() const{
return lista;
}
dove lista è sempre un oggetto privato di NomeClasse di tipo CList (non un puntatore)
ALLORA FUNZIONA
e se invece
lista è un oggetto privato di NomeClasse di tipo CList*
e il metodo è
CList* NomeClasse::getList() const{
return lista;
}
allora funziona di nuovo
in pratica la cosa che non concepisce, credo, è di vedersi la & messa davanti a lista, come se volessi modificare l'oggetto (che in realtà non viene modificato ma estrapolo solo l'indirizzo)
:muro:
ilsensine
21-12-2006, 08:36
lo credevo anche io ma
se il metodo invece di essere
CList* NomeClasse::getList() const{
return &lista;
}
è
CList NomeClasse::getList() const{
return lista;
}
dove lista è sempre un oggetto privato di NomeClasse di tipo CList (non un puntatore)
ALLORA FUNZIONA
Certo che funziona; in quel modo non restituisci un reference a un _tuo_ oggetto, ma un oggetto completamente nuovo, creato tramite il costruttore di copia a partire dal tuo oggetto.
ilsensine
21-12-2006, 08:50
Nota che il problema di fondo è il seguente: se devi eseguire operazioni non-const sulla lista dell'oggetto, la getList non può essere const. Se invece devi eseguire operazioni const, non dovresti avere nessun problema a ritornare un const CList *.
Nota infine che puoi dichiarare due getList:
const CList* NomeClasse::getList() const {
return &lista;
}
CList* NomeClasse::getList() {
return &lista;
}
sarà il compilatore a scegliere automaticamente quale utilizzare caso per caso, in funzione delle operazioni (const o meno) che effettui sul reference restituito.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.