[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