Si, allora, ci ho ragionato e ho capito degli sbagli grossolani, ma ancora non ho raggiunto il risultato:
1- non ho messo una funzione membro all'interno delle mie classi che permettesse ad un oggetto di assere letto/scritto da file
2-usare tipo app non ha senso...
cmq l'esercizio che ho io ho questa gerarchia: articolo che può esssere o un dvd o un videogioco.
Quindi: typedef articolo* tipo.
Quando voglio fare la scrittura su file, devo prendere gli indirizzi salvati nella lista e scrivere su file gli oggetti puntati (non gli indirizzi).
Quindi per la lettura devo leggere i dati e metterli in un nuovo oggetto salvato dinamicamente, il cui indirizzo è salvato nella lista.
Se ci siete fin qui, io ho rifatto(stavolta bene) la scrittura su file:
void lista::scrivi_su_file(const char* percorso)
{
fstream file;
file.open(percorso,ios::out|ios::app);
if (!file) cout << "errore apertura";
else
{
nodo* app=l;
while (app)
{
app->get_elem()->scrivi(file);
file << endl;
app=app->get_next();
}
}
file.close();
}
IL MIO PROBLEMA FONDAMENTALE NELLA LETTURA DA FILE E' IL SEGUENTE: QUANDO LEGGO UN FILE, DATO CHE APPARTIENE AD UNA GERARCHIA POLIMORFA, NON SO SE è UN ARTICOLO, UN VIDEOGIOCO, O UN DVD, QUINDI COME FACCIO A CAPIRE QUANDO FINISCE LA LETTURA? HO PENSATO SEMPLICEMENTE QUANDO TORNA A CAPO. MA IL PROBLEMA ANCORA PIù GRANDE E': COME FACCIO A COSTRUIRE ED ALLOCARE UN OGGETTO NON SAPENDO DI CHE TIPO E' IN PARTENZA? FORSE IL PROBLEMA SI RISOLVE CON I FILE BINARI? MA COMUNQUE NON SAPREI CHE TIPO DI COSTRUTTORE CHIAMARE!
void lista::leggi_da_file(const char* percorso)
{
fstream file;
file.open(percorso,ios::in);
if (!file) cout << "errore nel file";
else
{
[b]....?????????......
push( DI COSA?);[/b]
}
}
file.close();
}