Deja je te conseille de lire ca au niveau de la difference entre une declaration et une definition : http://stackoverflow.com/questions [...] eclaration
La compilation séparée se passe comme il faut, toutes les déclarations ont bien été faites comme il faut, par contre, au moment du linkage (le moment ou tous les fichier .o son rassembles pour faire un seul exécutable), le linker (le programme charge de rassembler les .o, sous linux, c'est en général ld), te dis "je ne trouve pas la définition de Environment::int_".
Dans le cas des multiples définition, c'est l'inverse, le linker trouve plusieurs fois le même identifiant (variable ou fonction) déclaré dans le même scope. Généralement, ça veut dire que tu compiles plusieurs fois le même fichier.
Voila le problème, maintenant la question c'est pourquoi.
En C++, on ne met traditionnellement que la définition d'une classe et de ses fonctions membres dans les .hpp (sauf pour les template, mais c'est un autre sujet), et on les implémente dans un .cpp.
En gros, si j'ai une classe A, j'aurais comme fichier:
A.hpp
Code :
- class A
- {
- A();
- void func();
- };
|
A.cpp
Code :
- A::A()
- {
- std::cout << "constructeur de A" << std::endl;
- }
- void
- A::func()
- {
- std::cout << "A::func()" << std::endl;
- }
|
Ensuite, quand je vais lancer mon Makefile, l'objectif serra de compiller tous mes .cpp (mais pas les .hpp) un par un (pour faire les .o), puis de tous les linker ensemble pour en faire un exécutable.
Essaye de formater ton code comme ca, ca devrait t'enlever pas mal d'erreur. Si ca ne fonctionne toujours pas, poste le code de ton Makefile.
PS: Et je me suis plante, j'ai poste deux fois.
Message édité par vhb__ le 07-08-2013 à 13:00:34