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?