PDA

Visualizza la versione completa : [C++] Costruttore in C++


frodo_jedi
12-11-2005, 16:15
Ciao a tutti, ho una questione disperata che non riesco a risolvere:
non capisco perchè il compilatore g++ (quando cerco di compilare con
g++ Cliente.cpp -o Cliente) mi ritorna questo errore :

/tmp/ccIHzAMZ.o(.text+0x25): In function `main':
: undefined reference to `Cliente::Cliente[in-charge]()'
/tmp/ccIHzAMZ.o(.text+0x62): In function `main':
: undefined reference to `Cliente::~Cliente [in-charge]()'
/tmp/ccIHzAMZ.o(.text+0x7f): In function `main':
: undefined reference to `Cliente::~Cliente [in-charge]()'
collect2: ld returned 1 exit status


Ecco il file Cliente.h


class Cliente{
public:

Cliente();
~Cliente();
};


Ecco il file Cliente.cpp


#include <iostream.h>
#include "Cliente.h"

main( ){

Cliente c;

cout << " prova" << endl;

}


Qualcuno mi potrebbe aiutare per favore?

Mods
12-11-2005, 16:18
devi definire sia il costruttore ed il distruttore. nn puoi lasciarli in sospeso.

public Cliente::Cliente(){};
public Cliente::~Cliente(){};

frodo_jedi
12-11-2005, 16:39
grazie!!!!
Adesso funziona!
Non avevo messo le graffe dopo il costruttore e il distruttore!

A buon rendere! :-)

frodo_jedi
12-11-2005, 18:23
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:



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




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



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?

dietil
12-11-2005, 23:32
Probabilmente perché non stai linkando Lista.o ,prova così:
g++ CodaFifo.cpp Lista.cpp -o CodaFifo

frodo_jedi
13-11-2005, 11:36
TI RINGRAZIO ORA FUNZIONA!

Loading