A parte il cast completamente inutile e pericoloso, il problema vero è che stai lavorando su liste diverse, quindi gli iteratori sono diversi.
qui restituisci la lista per valore e nel for stai lavorando di fatto su liste diverse.codice:std::list<Proprieta*> Struttura::getListaProprieta()
Ora hai due possibilità:
1) restituisci un puntatore/reference alla lista interna (fortemente sconsigliato)
2) effettui la copia della lista e poi usi quella per ricavare gli iteratori.
codice:Struttura struttura; Proprieta *compressione = new Compressione(1); struttura.addListaProprieta(compressione); std::list<Proprieta*>::iterator i; std::list<Proprieta*> prop = struttura.getListaProprieta(); for (i = prop.begin(); i != prop.end(); ++i) { cout << i->getTipo() ; }