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):

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);
Il prob. dovrebbe essere nella cancellazione dell'elemento.
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.