cent
Novello Novizio
Non Connesso
Messaggi: 197
Media messaggi
|
 |
« inserita: 01 Gennaio, 2009, 21:41:24 » |
|
Salve a tutti ragazzi. Sto preparando un programmino per l'esame di informatica e non riesco a risolvere un problema. Praticamente ho creato una funzione che crea una lista dinamica; questa viene invocata passandogli dei parametri per reference. Tali parametri sono tutti nulli, dato che verranno riempiti dalla funzione stessa al suo termine. Se passo delle semplici variabili, tutto funziona; se passo invece un puntatore (dove verrà memorizzato l'indirizzo della testa della lista), questo torna sempre NULL: ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///Funzione che legge il file "database/registroAbbonamenti.txt" e lo memorizza in una lista dinamica/// ///////////////////////////////////////////////////////////////////////////////////////////////////////// void leggiAbbonamenti(int &numAbb, int &codiceAbb, abbonamento *testaListaAbb){ [...] return; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///Fine funzione/// ///////////////////
int main(){ int numAbb, codiceAbb; abbonamento *testaListaAbb=NULL; leggiAbbonamenti(numAbb, codiceAbb, testaListaAbb); system("PAUSE"); }
E' sbagliato il passaggio oppure c'è proprio qualcosa nella funzione?? Grazie mille Roberto
|
|
|
|
« Ultima modifica: 01 Gennaio, 2009, 22:30:33 da cent »
|
Registrato
|
|
|
|
kelev
Entusiasta Emergente

Non Connesso
Sesso: 
Messaggi: 1.757
Media messaggi
I'm a dreamer.
|
 |
« Risposta #1 inserita: 01 Gennaio, 2009, 21:59:03 » |
|
Prova così: ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///Funzione che legge il file "database/registroAbbonamenti.txt" e lo memorizza in una lista dinamica/// ///////////////////////////////////////////////////////////////////////////////////////////////////////// void leggiAbbonamenti(int numAbb, int codiceAbb, abbonamento *testaListaAbb){ [...] return; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///Fine funzione/// ///////////////////
int main(){ int numAbb, codiceAbb; abbonamento *testaListaAbb=NULL; leggiAbbonamenti(numAbb, codiceAbb, &testaListaAbb); system("PAUSE"); }
|
|
|
|
|
Registrato
|
"E alla fine sei da solo, dove vai, con chi brindi?"
|
|
|
cent
Novello Novizio
Non Connesso
Messaggi: 197
Media messaggi
|
 |
« Risposta #2 inserita: 01 Gennaio, 2009, 22:06:13 » |
|
No, ci avevo provato anche io ma l'errore è il seguente: 163 K:\Parcheggio.cpp cannot convert `abbonamento**' to `abbonamento*' for argument `3' to `void leggiAbbonamenti(int&, int&, abbonamento*)'
|
|
|
|
|
Registrato
|
|
|
|
kelev
Entusiasta Emergente

Non Connesso
Sesso: 
Messaggi: 1757
Media messaggi
I'm a dreamer.
|
 |
« Risposta #3 inserita: 01 Gennaio, 2009, 22:08:32 » |
|
Puoi postare il programma che compili?
|
|
|
|
|
Registrato
|
"E alla fine sei da solo, dove vai, con chi brindi?"
|
|
|
cent
Novello Novizio
Non Connesso
Messaggi: 197
Media messaggi
|
 |
« Risposta #4 inserita: 01 Gennaio, 2009, 22:13:49 » |
|
Questa è la fuzione principale, il main è quello sopra: void leggiAbbonamenti(int &numAbb, int &codiceAbb, abbonamento *testaListaAbb){ ifstream fin; char nome[100], residenza[100], telefono[20], buffer1[31], file[100], codice[100], buffer2[31], credito[100]; int codice2; abbonamento *current=NULL; abbonamento *head=NULL; abbonamento *temp=NULL;
strcpy(file,"database/registroAbbonamenti.txt"); fin.open(file); if(fin.fail()){ cout<<"Errore (1) apertura file!\n"; } int t=0; while(!fin.eof()){ //estrazione campi //se il primo carattere è diverso da "/", allora errore lettura del file fin.getline(buffer1,30);t++; fin.getline(nome,99);t++; fin.getline(residenza,99);t++; fin.getline(telefono,99);t++; fin.getline(codice,99);t++; fin.getline(credito,99);t++; fin.getline(buffer2,30);t++; codiceAbb=atoi(codice); codice2=atoi(codice); if (buffer1[0]!='/' || buffer2[0]!='/'){ cout<<"Errore (2) di lettura del file. File danneggiato! Righe:: "<<t<<"\n"; //cout<<"Buffer1:: -"<<buffer1<<"- nome:: -"<<nome<<"- residenza:: -"<<residenza<<"- telefono:: -"<<telefono<<"- codice:: -"<<codice<<"-\n"; break; }else{ //aggiungo alla struttura dati //cout<<"Aggiungo i dati alla lista\n"; temp=new abbonamento; strcpy(temp->nome,nome); strcpy(temp->residenza,residenza); strcpy(temp->telefono,telefono); strcpy(temp->codice,codice); strcpy(temp->credito,credito); temp->next=NULL; if(head==NULL){ head=temp; //current=head; }else{ current=head; while(current->next!=NULL) current=current->next; current->next=temp; } } }//fine ciclo while cout<<"Righe totali file: "<<t<<"\n"; cout<<"Elenco abbonamenti: \n"; current=head; testaListaAbb=head; int i=0; while(current!=NULL){ cout<<"\n--------------------\n"; cout<<current->nome<<"\n"; cout<<current->residenza<<"\n"; cout<<current->telefono<<"\n"; cout<<current->codice<<"\n"; cout<<current->credito<<"\n"; current=current->next; i++; } cout<<"\n--------------------\n"; numAbb=i; return; }
|
|
|
|
|
Registrato
|
|
|
|
kelev
Entusiasta Emergente

Non Connesso
Sesso: 
Messaggi: 1757
Media messaggi
I'm a dreamer.
|
 |
« Risposta #5 inserita: 01 Gennaio, 2009, 22:15:18 » |
|
Nel passaggio di parametri un puntatore: - Parametri formali => void ciao(int *x, int *y) ; - Parametri attuali => ciao(&x,&y). Quindi da così: void leggiAbbonamenti(int &numAbb, int &codiceAbb, abbonamento *testaListaAbb){ a così: void leggiAbbonamenti(int numAbb, int codiceAbb, abbonamento *testaListaAbb){
|
|
|
|
« Ultima modifica: 01 Gennaio, 2009, 22:21:36 da xajx »
|
Registrato
|
"E alla fine sei da solo, dove vai, con chi brindi?"
|
|
|
menelicte
Coraggioso Chiacchierone
Non Connesso
Messaggi: 596
Media messaggi
|
 |
« Risposta #6 inserita: 01 Gennaio, 2009, 22:21:33 » |
|
Se devi modificare l'indirizzo della lista, devi passarlo per riferimento, usando quindi un puntatore di puntatore. Prova a modificare così, usando (*testaListaAbb) al posto di testaListaAbb all'interno della funzione: ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///Funzione che legge il file "database/registroAbbonamenti.txt" e lo memorizza in una lista dinamica/// ///////////////////////////////////////////////////////////////////////////////////////////////////////// void leggiAbbonamenti(int numAbb, int codiceAbb, abbonamento **testaListaAbb){ [...] return; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///Fine funzione/// ///////////////////
int main(){ int numAbb, codiceAbb; abbonamento *testaListaAbb=NULL; leggiAbbonamenti(numAbb, codiceAbb, &testaListaAbb); system("PAUSE"); }
|
|
|
|
|
Registrato
|
"Tentare è il primo passo verso il fallimento" Homer J.
|
|
|
cent
Novello Novizio
Non Connesso
Messaggi: 197
Media messaggi
|
 |
« Risposta #7 inserita: 01 Gennaio, 2009, 22:24:52 » |
|
No, non devo modificarlo, devo solo ottenerlo per utilizzarlo in un'altra funzione.
@xajx: non funziona anche apportando le modifiche sugeritemi.
|
|
|
|
|
Registrato
|
|
|
|
cent
Novello Novizio
Non Connesso
Messaggi: 197
Media messaggi
|
 |
« Risposta #8 inserita: 01 Gennaio, 2009, 22:30:13 » |
|
Ok, ora funziona. Grazie a tutti
|
|
|
|
|
Registrato
|
|
|
|
kelev
Entusiasta Emergente

Non Connesso
Sesso: 
Messaggi: 1757
Media messaggi
I'm a dreamer.
|
 |
« Risposta #9 inserita: 01 Gennaio, 2009, 22:30:39 » |
|
Cosa hai corretto?
|
|
|
|
|
Registrato
|
"E alla fine sei da solo, dove vai, con chi brindi?"
|
|
|
cent
Novello Novizio
Non Connesso
Messaggi: 197
Media messaggi
|
 |
« Risposta #10 inserita: 06 Gennaio, 2009, 11:40:20 » |
|
Ciao, allora ho messo un doppio asterisco al nome della variabile (puntatore) quando definisco la funzione; all'interno della funzione, quando vado a modificare il puntatore in questione metto solo un asterisco. Quando richiamo la funzione, passo il puntatore senza * e &.
Ciao ciao
|
|
|
|
|
Registrato
|
|
|
|
kelev
Entusiasta Emergente

Non Connesso
Sesso: 
Messaggi: 1757
Media messaggi
I'm a dreamer.
|
 |
« Risposta #11 inserita: 06 Gennaio, 2009, 11:51:37 » |
|
Ah ok grazie 
|
|
|
|
|
Registrato
|
"E alla fine sei da solo, dove vai, con chi brindi?"
|
|
|
|