19/04/16 20:13
Vignus
Salve a tutti, sono alle prime armi con i linguaggi di programmazione. Ho imparato bene fino a adesso le cose basi come le variabili,i cicli,le strutture,puntatori ecc... sono arrivato al creare delle liste, ho provato a creare una semplice lista che gestisce i nomi di persone (giusto per capire come funzionano) solo che una volta terminato il programma e ricontrollato quando vado a compilare mi dà questi errori:
C:\Users\mattia\AppData\Local\Temp\ccsfSAiB.o lista.cpp.text+0x88): undefined reference to `svouta_lista()'
C:\Users\mattia\AppData\Local\Temp\ccsfSAiB.o lista.cpp.text+0x98): undefined reference to `svouta_lista()'
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe C:\Users\mattia\AppData\Local\Temp\ccsfSAiB.o: bad reloc address 0x27 in section `.text$_ZNSt11char_traitsIcE7compareEPKcS2_y[_ZNSt11char_traitsIcE7compareEPKcS2_y]'
C:\Users\mattia\Desktop\Mattia\lavori c\collect2.exe [Error] ld returned 1 exit status
Ecco il codice sorgente:
Praticamente mi dà problemi sulla funzione svuota_lista e non capisco come mai, forse ho fatto qualche errore con i puntatori non so. Infatti cancellando la funzione svuota_lista il resto del programma gira bene. Potete darmi una mano?
Un' altra cosa, secondo voi cos è veramente importante da studiare se voglio diventare un programmatore di buon livello riguardo al C++ o altri linguaggi di programmazione? Grazie
C:\Users\mattia\AppData\Local\Temp\ccsfSAiB.o lista.cpp.text+0x88): undefined reference to `svouta_lista()'
C:\Users\mattia\AppData\Local\Temp\ccsfSAiB.o lista.cpp.text+0x98): undefined reference to `svouta_lista()'
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe C:\Users\mattia\AppData\Local\Temp\ccsfSAiB.o: bad reloc address 0x27 in section `.text$_ZNSt11char_traitsIcE7compareEPKcS2_y[_ZNSt11char_traitsIcE7compareEPKcS2_y]'
C:\Users\mattia\Desktop\Mattia\lavori c\collect2.exe [Error] ld returned 1 exit status
Ecco il codice sorgente:
#include <iostream> #include <string> using namespace std; struct nodo{ string nome; nodo* succ; }; nodo* testa; void inizializza(); bool lista_vuota(); void inserisci(); void elimina(); void visualizza(); void svouta_lista(); void presenta_menu(); int main() { short int s; inizializza(); presenta_menu(); do{ do{ cout<<"\nOPZIONE NUMERO: "; cin>>s; } while(s<1 || s>5); switch(s) { case 1: inserisci(); break; case 2: elimina(); break; case 3: visualizza(); break; case 4: svouta_lista(); break; } } while (s!=5); svouta_lista(); return 0; } void inizializza() { testa=NULL; } bool lista_vuota() { if(testa==NULL) return true; return false; } void inserisci() { short int x; string nome; nodo* nuovo; nodo* temp; nodo* prec; cout<<"Inserisci il numero di nomi da inserire: "; cin>>x; for (int i=0;i<x;i++) { cout<<"Inserisci il nome: "; cin>>nome; nuovo= new nodo; nuovo->nome=nome; nuovo->succ=NULL; if (lista_vuota()) testa= nuovo; else { if (testa->nome >= nuovo->nome) { temp=testa; testa=nuovo; testa->succ= temp; } else { temp= testa; while (temp!=NULL && nuovo->nome >= temp->nome) { prec=temp; temp= temp->succ; } nuovo->succ= temp; prec->succ= nuovo; } } } } void elimina() { string nome; nodo* temp; nodo* prec; bool trovato= false; cout<<"Nome da eliminare: "; cin>>nome; if (lista_vuota()) cout<<"Lista vuota"; else { if (testa->nome == nome) { trovato=true; temp= testa->succ; cout<<"Il nome eliminato e\': "<<testa->nome<<endl; delete testa; testa= temp; } else { temp=testa->succ; prec= testa; do { if(temp->nome == nome) { trovato=true; prec->succ= temp->succ; cout<<"Il nome eliminato e\': "<<temp->nome<<endl; delete temp; } else { prec=temp; temp=temp->succ; } } while(!trovato && temp!=NULL); } if (!trovato) cout<<"Il nome non esiste"<<endl; } } void visualizza() { nodo* p; cout<<"--- Elenco dei nomi: ---"<<endl; p= testa; while (p!=NULL) { cout<<"* "<<p->nome<<endl; p=p->succ; } cout<<"--- Fine elenco ---"; } void svuota_lista() { nodo* p; nodo* temp; while (testa != NULL) { temp= testa; testa= testa->succ; delete temp; } cout<<"Lista vuota"<<endl; } void presenta_menu() { cout<<endl<<"***********************"<<endl; cout<<"1. Inserisci nome: "<<endl; cout<<"2. Elimina nome: "<<endl; cout<<"3. Visualizza lista: "<<endl; cout<<"4. Svuota lista al momento non disponibile :( "<<endl; cout<<"5. Fine: "<<endl; cout<<"***********************"<<endl; }
Praticamente mi dà problemi sulla funzione svuota_lista e non capisco come mai, forse ho fatto qualche errore con i puntatori non so. Infatti cancellando la funzione svuota_lista il resto del programma gira bene. Potete darmi una mano?
Un' altra cosa, secondo voi cos è veramente importante da studiare se voglio diventare un programmatore di buon livello riguardo al C++ o altri linguaggi di programmazione? Grazie
aaa