26/08/11 10:15
el cuba libre
ciao
ho un problema con questo codice. ho creato una lista e via via devo inserire dei nuovi elementi, nel metodo nuovo_degente sembra tutto funzionare solo che al suo esterno per esempio in printinfo pare che venga distrutta la lista cioè che il pirmo elemento sia NULL e quindi si blocca l'esecuzione del programma. mi sto riguardanto le regole di visibilità delle variabili e ho confermato un dubbio che avevo anche prima, non è che quando esco dalla classe il distruttore distrugge tutto quello che ho inserito? posto il codice per intero, o quasi!XD
qualcuno di voi mi può aiutare?
grazie mille
ciaociao
ho un problema con questo codice. ho creato una lista e via via devo inserire dei nuovi elementi, nel metodo nuovo_degente sembra tutto funzionare solo che al suo esterno per esempio in printinfo pare che venga distrutta la lista cioè che il pirmo elemento sia NULL e quindi si blocca l'esecuzione del programma. mi sto riguardanto le regole di visibilità delle variabili e ho confermato un dubbio che avevo anche prima, non è che quando esco dalla classe il distruttore distrugge tutto quello che ho inserito? posto il codice per intero, o quasi!XD
struct archivio_degenze { char *nomi_degenti; int numero_giorni_degenza; struct archivio_degenze *successivo; }; int contaelementi(archivio_degenze *first); class reparti : public element { archivio_degenze *primo,*ultimo,*degente; public: char *nome_reparto; int numero_posti,giorni_degenza_media; reparti(): primo(0),ultimo(0) {} ~reparti() { archivio_degenze *degente=primo; while (degente) { primo=degente->successivo; delete degente; degente=primo; } } void nuovo_degente() { archivio_degenze *degente= new archivio_degenze; cout<<"inserisci il nome del degente"<<endl; cin>>degente->nomi_degenti; cout<<"inserisci i gioni di degenza"<<endl; cin>>degente->numero_giorni_degenza; degente->successivo=0; if(primo) { ultimo->successivo=degente; } else { primo=degente; } ultimo=degente; } void printinfo () { degente=primo; //il programma si blocca proprio a questo cout. cout<<" nome degente : "<<degente->nomi_degenti<<endl; cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl; int numero_degenti=contaelementi(degente); cout<<"numero degenti : "<<numero_degenti<<endl; cout<<" nome degente : "<<degente->nomi_degenti<<endl; cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl; degente=primo; for(int i=0;i<numero_degenti;i++) { cout<<" nome degente : "<<degente->nomi_degenti<<endl; cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl; } int degenza_totale=0; degente=primo; for(int i=0;i<numero_degenti;i++) { degenza_totale=degenza_totale+degente->numero_giorni_degenza; } giorni_degenza_media=degenza_totale/numero_degenti; cout<<"giorni di degenza media del reparto : "<<giorni_degenza_media<<endl; } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); reparti istanza[25]; char *nome=new char[25]; int x,altriospedali,i=0,j=0; do { altriospedali=0; cout<<"inserisci il nome dell'ospedale"<<endl; cin.getline(nome,25); istanza[j].impostanome(nome); do { x=0; istanza[i].nuovo_degente(); cout<<"devi inserire altri degenti?si(1),no(0)"<<endl; cin>>x; i++; istanza[i].printinfo(); }while(x==1); cout<<"devi inserire informazioni riguardanti altri ospedali?si(1),no(0)"<<endl; cin>>altriospedali; j++; }while(altriospedali==1); return a.exec(); } int contaelementi(archivio_degenze *first) { int i=0; archivio_degenze* n = first; while(n != NULL) { i++; n=n->successivo; } return (i); }
qualcuno di voi mi può aiutare?
grazie mille
ciaociao
Ultima modifica effettuata da el cuba libre 26/08/11 20:44
aaa