PDA

Visualizza la versione completa : [C++] Problema con il linker, credo


pier_IP
07-07-2011, 21:39
Ciao a tutti, sto tentando di risolvere un problema abbastanza basilare, sto imparando il C++ provenendo dal Java.
Ho creato una classe libri:

File: libri.h


#include <iostream>
using namespace std;

class libri {
public:
libri();
/*...metodi...*/
protected:
/*...campi....*/
};



File: libri.cpp


#include <iostream>
#include "libri.h"
using namespace std;

libri::libri(){
cout << "Siamo nel costruttore" << endl;
}



File: usoLibri.cpp


#include <iostream>
#include "libri.h"
using namespace std;

int main(){
libri l;
}


Le guide che sto seguendo dicono che il processo ottimale per creare classi e' quello di separare in 2 file(.h e .cpp) la dichiarazione dall'implementazione e poi in un altro file .cpp testare la classe (per l'information hiding suppongo).

Ma quando compilo il file usoLibri.cpp il compilatore mi dice che il costruttore non e' definito, perche' ???
Penso che il linker dovrebbe collegare la dichiarazione della classe nel file libri.h con l'implementazione della stessa nel file libri.cpp, ma a quanto pare non lo fa.....

Potete aiutarmi?

oregon
07-07-2011, 21:51
Aggiungi

#include "libri.h"

in libri.cpp

pier_IP
07-07-2011, 21:53
Aggiungi

#include "libri.h"

in libri.cpp

Si scusa l'include c'era, mi sono dimenticato di riportarla.

EDIT: l'ho aggiunto

oregon
07-07-2011, 22:12
Ok ... hai ancora errori? Quale ambiente/compilatore usi?

pier_IP
07-07-2011, 22:15
Uso ubuntu 9.10, il compilatore e' g++

oregon
07-07-2011, 22:16
E, scusa, come compili i vari file ?

pier_IP
07-07-2011, 22:27
Uso Code::Blocks che dovrebbe usare il compilatore implementato di default nel sistema(cioe' g++), ma ho provato anche a compilarli da terminale con il comando "g++ -o usoLibri usoLibri.cpp libri.cpp" risultato identico...

oregon
07-07-2011, 22:30
Originariamente inviato da pier_IP
risultato identico...

Mi mostri (copia-incolla) il messaggio d'errore completo quando compili con g++ ...

MItaly
07-07-2011, 22:38
Confermo che a me funziona... :bh:


matteo@teomint:~/Desktop/test$ cat > libri.h
#include <iostream>
using namespace std;

class libri {
public:
libri();
/*...metodi...*/
protected:
/*...campi....*/
};
matteo@teomint:~/Desktop/test$ cat > libri.cpp
#include <iostream>
#include "libri.h"
using namespace std;

libri::libri(){
cout << "Siamo nel costruttore" << endl;
}
matteo@teomint:~/Desktop/test$ cat > usoLibri.cpp
#include <iostream>
#include "libri.h"
using namespace std;

int main(){
libri l;
}
matteo@teomint:~/Desktop/test$ g++ -o usoLibri usoLibri.cpp libri.cpp
matteo@teomint:~/Desktop/test$ ./usoLibri
Siamo nel costruttore

oregon
07-07-2011, 22:40
Originariamente inviato da MItaly
Confermo che a me funziona... :bh:


Naturalmente anche a me ... con diversi ambienti/compilatori ... ecco perch volevo "vedere" l'errore ... attendiamo fiduciosi ... :)

Loading