Ho sbagliato a riscriverlo in modo compatto (dato che il main suppongo non abbia errori in chiamata). In realtà ho questa chiamta in inserimento (ma non è qui l'errore):
Il prob. dovrebbe essere nella cancellazione dell'elemento.codice:case 1: printf("\nInserisci un elemento: "); if(scanf("%d",&x)!=1) //inserisco x qui, se ci sono errori ripulisco il buffer { printf("Valore inserito errato\n"); fflush(stdin); } else l1.push(x);//Effettua l'inserimento nella lista (qui va tutto bene);
Le parti di: inserimento, stampa valore e ricerca funzionano perfettamente.
L'unica cosa che non va è la cancellazione.
Il prob. dovrebbe essere dopo la chiamata di l1.cancella(x).
Scusate dell'errore nel riportare in modo compatto il main, gli altri pezzi sono uguali al codice che ho, ci mancano soltanto le altre funzioni che non interessano il prob.
In pratica per esempio inserisco alcuni elementi: 1 , 5 , 7.
Faccio stampa per prova e escono giustamente (dato che l'inserimento lo faccio in testa): 7 , 5 , 1 .
Dico di eliminare per esempio 5.
Provo a stampare e mi ristampa la lista : 7 , 5 , 1.
In pratica non capisco perchè l'eliminazione non avviene.
Ho provato addirittura a scrivere
bool lista::eliminaval(nodo* l,int x){
l=NULL;
};
Per vedere se così l puntava a NULL, ma mi stampa comunque la lista l (non me la cambia).
Non so se c'è qualche prob. nei permessi, però la chiamata viene fatta da una funzione della classe, quindi dovrebbe andare(almeno funziona così per le altre).
La funzione cancella(int); , che è una funzione pub. , chiama la funzione privata eliminaval(nodo* l,int x); , che prende anche la lista l (così nessuno da interfaccia potrà mai toccare "l").
Nel momento in cui modifico l , non succede nulla....cioè l non cambia.

Rispondi quotando