[c++] errore metodo di stampa

Oo.Stud.ssa.oO
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 :
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
vict85
E' meglio se usi cin al posto di gets, a parte questo in che linea ti dà errore?

Oo.Stud.ssa.oO
"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();
             
        }
};

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(); }
}

Oo.Stud.ssa.oO
"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 :wink: :smt023 :smt023

apatriarca
Sì, le due condizioni hanno lo stesso significato.

Oo.Stud.ssa.oO
Ok, grazie :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.