Ciao a tutti, ho un problema che riguarda i puntatori:

Non capisco perche' avviene questa stranissima cosa:
(vi avverto che nonostante sia una domanda lunga in realta'
il problema e' facile da capire; inoltre se volete potete anche compilarvele da soli
con i comandi :
g++ -c Lista.cpp
g++ -o CodaFifo CodaFifo.cpp Lista.o
e potete eseguire con
./CodaFifo
e rendervi conto del mistero.......)


Considerate le seguenti classi:

Classe Nodo.h
codice:
class Nodo{
public:
	int q1,q2,f_value;
	Nodo(){
		q1 = 0;
		q2 = 0;
                f_value=0;

		
	}

	Nodo(int qu1, int qu2, int f_val){
		
		q1 = qu1;
		q2 = qu2;
		f_value = f_val;
		
	}


  	~Nodo(){}
};
Classe Cella.h:
codice:
#include "Nodo.h"

class Cella{

public:
	
 	Nodo n;
	Cella* next; //punta alla prossima cella
	Cella* pred; // punta alla cella precedente
		
	Cella(Nodo n1){
   		n = n1;
		next = NULL;
		pred = NULL;
	}
	~Cella(){}	
};
Classe Lista.h
codice:
#include "Cella.h"

class Lista{

public:
	
	Cella* head; // inizio della lista
	Cella* last; // fine della lista
	int nOggetti;// numero di oggetti presenti nella lista
	
	Lista(){
		
 		head = NULL;
		last = NULL;
		nOggetti = 0;
	}
	~Lista(){}	
};
La relativa classe Lista.cpp e' formata solo dalle seguenti 2 istruzioni
codice:
 #include <iostream.h>
 #include "Lista.h"
Ora, la classe CodaFifo eredita da Lista: ecco CodaFifo.h:
codice:
#include "Lista.h"

class CodaFifo : public Lista{

public:

  CodaFifo(){}
  ~CodaFifo(){}
  
  void inserisci(Nodo n);// inserisce una cella nella coda
  void cancella(int k);//cancella una cella
};

Infine la classe CodaFifo.cpp :
codice:
#include <iostream.h>
#include "CodaFifo.h"

// inserisce un nodo in fondo alla coda
void CodaFifo :: inserisci(Nodo n){
	
	Cella nuova_cella =  Cella(n);
	
	if(nOggetti == 0){// se bisogna inserire il primo elemento
	
		this->head = &nuova_cella;
	}else{
		
		nuova_cella.pred = this->last;
		this->last = &nuova_cella;
			
	}
	nOggetti++;
}



void CodaFifo::cancella(int k){ // non cancella,mostra solo il contenuto di this->head->n.q1

int a = this->head->n.q1;
cout << "sto cancellando; testa :" << a << "Numero oggetti:" << nOggetti << endl;
}

main(){
	Nodo n1,n2,n3;
	n1 = Nodo(1,82,53);
	n2 = Nodo(2,37,58);
	n3 = Nodo(3,28,33);
	
	CodaFifo l;
	l.inserisci(n1); cout << l.head->n.q1 << " " << l.nOggetti << endl;
	l.inserisci(n2); cout << l.head->n.q1 << " " << l.nOggetti << endl;
 	l.inserisci(n3); cout << l.head->n.q1 << " " << l.nOggetti << endl;
	
 	l.cancella(1);
	
	cout << endl;

}
Perche' l.cancella(1) non mi da' il risultato corretto? Il fatto e' che sicuramente c'e' qualche problema con i puntatori perche' il campo nOggetti viene restituito correttamente;Purtroppo
in fase di compilazione non ho nessun erreore dunque la sintassi e' corretta.


Vi prego aiutatemi!!!!!!!!!!!