Erreur de compilation incompréhensible
Bonjour à tous.
Ci dessus je vous présente un bout de code bateau divisé en 3 fichiers:
main.cc
Code:
1 2 3 4 5 6 7 8 9 10
|
#include <iostream>
#include <string>
#include "MaClasse.h"
int main( int argc, char* argv[] ){
MaClasse obj(30,20);
std::cout << "Hello World!" << std::endl;
} |
MaClasse.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include <iostream>
int Somme(int a, int b);
class MaClasse {
public:
MaClasse(int x, int y);
~MaClasse(){};
private:
int _x,_y;
}; |
MaClasse.cc
Code:
1 2 3 4 5
| #include "Maclasse.h"
int Somme(int a, int b){return a+b;}
MaClasse::MaClasse(int x, int y){std::cout << "Hey!" << std::endl; _x=x;_y=y;} |
En compilant ceci (sous MAC) avec la commande:
c++ main.cc MaClasse.cc
là pas de problème.
Si maintenant, au lieu de définir ma fonction Somme dans le .cc je mets la définition directement dans le header, mes fichiers MaClasse .h et .cc deviennent :
MaClasse.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include <iostream>
int Somme(int a, int b){return a+b;};
class MaClasse {
public:
MaClasse(int x, int y);
~MaClasse(){};
private:
int _x,_y;
}; |
MaClasse.cc
Code:
1 2 3
| #include "Maclasse.h"
MaClasse::MaClasse(int x, int y){std::cout << "Hey!" << std::endl; _x=x;_y=y;} |
Et là à la compilation j'ai l'erreur suivante :
Citation:
duplicate symbol __Z5Sommeii in:
/var/folders/_0/4j2nn15x44s9cys_2hyct4vc0000gq/T/main-3bc424.o
/var/folders/_0/4j2nn15x44s9cys_2hyct4vc0000gq/T/MaClasse-6ec5ac.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Quelqu'un pourrait-il m'éclairer ?
Merci