[c++] errore metodo di stampa
Ciao a tutti, ho un problema con questo codice: quando eseguo va in crash, non capisco perchè!!
Chi mi sa aiutare?
Qui la definizione delle strutture :
qui il main:
Grazie in anticipo!!

Qui la definizione delle strutture :
typedef struct TipoViaggiatore{ int ID; char Nome[MAXLUN]; int Provenienza; float Valuta; TipoViaggiatore(){ ID=0; Nome[0]='\0'; Provenienza=0; Valuta=0.0; } TipoViaggiatore(int _ID){ ID=_ID; Nome[0]='a'; Provenienza=0; Valuta=0.0; } bool gt(TipoViaggiatore v){ if(Provenienza>v.Provenienza){ return true;} return false; } ~TipoViaggiatore(){ } void Print(){ printf("{%d,%s,%d,%f}",ID,Nome,Provenienza,Valuta); } }; typedef struct TipoLista{ TipoViaggiatore Viaggiatore; TipoLista* next; TipoLista* prev; TipoLista(){ TipoViaggiatore v; Viaggiatore=v; next=NULL; prev=NULL; } TipoLista(TipoViaggiatore v,TipoLista* n, TipoLista* p){ Viaggiatore=v; next=n; prev=p; } ~TipoLista(){ } void Print(){ Viaggiatore.Print(); } }; typedef struct TipoVolo{ TipoLista* ElencoViaggiatori; char Destinazione[MAXLUN]; int NumeroVolo; TipoVolo(){ ElencoViaggiatori=NULL; Destinazione[0]='\0'; NumeroVolo=0; } TipoVolo(TipoLista* e, int n){ ElencoViaggiatori=e; Destinazione[0]='\0'; NumeroVolo=n; } void Print(){ printf("[%d::%s]=>",NumeroVolo,Destinazione); ElencoViaggiatori->Print(); } };
qui il main:
TipoVolo Aereo[N]; TipoViaggiatore Viaggiatore; int i,j; for(i=0;i<N;i++){ Aereo[i].NumeroVolo=i; cout<<"Inserire destinazione:"; gets(Aereo[i].Destinazione); Aereo[i].Print(); }
Grazie in anticipo!!
Risposte
E' meglio se usi cin al posto di gets, a parte questo in che linea ti dà errore?
"vict85":
E' meglio se usi cin al posto di gets, a parte questo in che linea ti dà errore?
In pratica dovrebbe stampare:
[NumeroVolo::Destinazione]=>{ID, Nome, Provenienza, Valuta}
stampa
[NumeroVolo::Destinazione]=>e poi va in crash
Quindi il problema deve essere nel metodo Print() di TipoVolo:
typedef struct TipoVolo{ TipoLista* ElencoViaggiatori; char Destinazione[MAXLUN]; int NumeroVolo; TipoVolo(){ ElencoViaggiatori=NULL; Destinazione[0]='\0'; NumeroVolo=0; } TipoVolo(TipoLista* e, int n){ ElencoViaggiatori=e; Destinazione[0]='\0'; NumeroVolo=n; } void Print(){ printf("[%d::%s]=>",NumeroVolo,Destinazione); ElencoViaggiatori->Print(); } };
Prova ad aggiungere un test per verificare che elenco viaggiatori non sia una lista vuota..
void Print() { printf("[%d::%s]=>", NumeroVolo, Destinazione); if (ElencoViaggiatori) { ElencoViaggiatori->Print(); } }
"apatriarca":
Prova ad aggiungere un test per verificare che elenco viaggiatori non sia una lista vuota..
void Print() { printf("[%d::%s]=>", NumeroVolo, Destinazione); if (ElencoViaggiatori) { ElencoViaggiatori->Print(); } }
In effetti adesso va..in pratica dato che elencoViaggiatori era vuoto non sapeva cosa stampare giusto?
ma dire
if (ElencoViaggiatori) { ElencoViaggiatori->Print(); }
equivale a dire
if (ElencoViaggiatori!=NULL) { ElencoViaggiatori->Print(); }
?
Grazie 1000 per l'aiuto



Sì, le due condizioni hanno lo stesso significato.
Ok, grazie
