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
codice:
int x;lista l1;
cin<<x;
l1.cancella(x);
contatore.h
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.