Bonjour à tous.
Ci dessus je vous présente un bout de code bateau divisé en 3 fichiers:
main.ccMaClasse.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; };En compilant ceci (sous MAC) avec la commande:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;}
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.hMaClasse.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; };Et là à la compilation j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #include "Maclasse.h" MaClasse::MaClasse(int x, int y){std::cout << "Hey!" << std::endl; _x=x;_y=y;}
Quelqu'un pourrait-il m'éclairer ?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)
Merci
Partager