Salve a tutti, ringrazio prima di tutto oregon, che mi ha risposto poco tempo fa in 2 topic.
Nel seguente problema, vorrei che la seguente chiamata a funzione, mi cancellasse il valore x nella lista, e mi ritornasse un valore buleano 1=se cancellato , 0=se non cancellato.
Metto le parti del programma che servono alla funzione (quello che ometto riguarda altre funzioni).
main.cpp
contatore.hcodice:int x;lista l1; cin<<x; l1.cancella(x);
codice:struct nodo { int valore; nodo *succ; }; class lista { nodo *l; bool eliminaval(nodo* l,int x); public: lista(){l=0;} //Costruttore ~lista(); //Distruttore bool cancella(int); };
contatore.cpp
codice:bool lista::cancella(int x) { return eliminaval(l,x); }; bool lista::eliminaval(nodo* l,int x){ bool cancellato; nodo* s; s=l; while(l->succ!=NULL){ //controlla elementi da dopo il primo if(l->succ->valore==x){ l->succ=l->succ->succ; cancellato=1; }}; //fine if e fine while if(s->valore==x){ //controlla se il primo valore è x, se si parte dal succesivo s=s->succ; cancellato=1; }; //fine if return cancellato; };// fine funzione eliminaval
Non riesco a capire se è sbagliata la funzione, o in qualche modo l non è raggiungibile .
Mi stampa sempre gli stessi elementi che ho messo in l, e non mi elimina niente.
Naturalmente la stampa la faccio con un'altra funzione l1.stampa(); , ma funziona bene, e i dati vengono stampati, funziona anche se inserisco un elemento con l1.push(x); .
In pratica solo questo pezzo non va.
Ho fatto chiamate simili per altre funzioni, e funzionano bene, però in questo caso l non me lo modifica.

Rispondi quotando