Ho trovato un problema analogo al precedente ma le cause sono diverse:

Ho una classe CodaFifo che eredita dalla superclasse Lista.
In Lista c'è il metodo cancella():

Ecco 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(){}
	
	//void inserisci(Nodo n);// inserisce un nodo nella lista
	void cancella();// cancella il nodo in testa alla lista	

};
E il relativo file cpp (Lista.cpp) è:

codice:
#include <iostream.h>
#include "Lista.h"


// cancella il nodo in testa alla lista
void Lista::cancella(){

	cout << " sto cancellando " << endl;
	if(nOggetti == 1){ // se e' l'unico elemento
		this->head = NULL;
	}else{
		this->head = this->head.next;	
	}
	nOggetti--;
}

Nel main del file CodaFifo.cpp
faccio una chiamata al metodo cancella di Lista
applicato a un oggetto della classe CodaLifo:

codice:
main(){
	Nodo n1,n2,n3;
	n1 = Nodo(1,2,3);
	n2 = Nodo(22,37,5);

	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.cancella(); 
	
	//cout << l.head->n.q1 << " " << l.nOggetti << endl;
	 
	
}
Compilando con g++ CodaFifo.cpp -o CodaFifo ottengo il seguente errore:

/tmp/ccUpaM0L.o(.text+0x2ef): In function `main':
: undefined reference to `Lista::cancella()'
collect2: ld returned 1 exit status


Se ora modifico il file Lista.h mettendo al posto di
void cancella(); void cancella(){}
cioè ho aggiunto le parentesi graffe al posto del ;
ottengo che il compilatore non genera più errori tuttavia
non esegue il codice di cancella() (ad esempio non stampa
la stringa "sto cancellando" che è la prima istruzione di
cancella() ).

Qualcuno mi può aiutare per favore?