Bonjour, avant toute chose je tiens à vous dire que je suis débutant dans le langage du C++. Cette chose étant faite j'aimera avoir votre expertise sur les deux codes suivants, l'un compile très bien l'autre pas du tout et j'aimerai arriver à ce qu'il puisse compiler. Voici le code qui compile :
Voici le fichier main.cpp
Le fichier class1.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include <iostream> #include "class1.hpp" int main(){ Class1 class1; return EXIT_SUCCESS; }
Le fichier class1.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <iostream> #include "class1.hpp" Class1 :: Class1(){ class2; }
Le fichier class2.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef DEF_CLASS1 #define DEF_CLASS1 #include "class2.hpp" class Class1{ public: Class1(); Class2 class2; }; #endif
Et enfin le fichier class2.hpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <iostream> #include "class2.hpp" Class2 :: Class2(){ std::cout << "Test OK1" << std::endl; }
Voila ce code (certes on peut l'améliorer, et c'est digne selon vous d'un débutant j'en conviens :-°) mais aussi mauvais soit-il il compile ce qui est déjà une bonne chose (en tout cas pour moi). Et puis j'ai eu l'idée de mettre un argument et là... RIEN NE VAS PLUS... j'ai des références indéfinies... je vous poste les modifications :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef DEF_CLASS2 #define DEF_CLASS2 class Class2{ public: Class2(); }; #endif
le fichier main.cpp :
le fichier class1.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include <iostream> #include "class1.hpp" int main(){ Class1 class1; return EXIT_SUCCESS; }
le fichier class1.hpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <iostream> #include "class1.hpp" Class1 :: Class1(){ class2("hello"); }
le fichier class2.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef DEF_CLASS1 #define DEF_CLASS1 #include "class2.hpp" class Class1{ public: Class1(); Class2 class2(std::string a); }; #endif
et enfin le fichier class2.hpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <iostream> #include "class2.hpp" Class2 :: Class2(std::string a){ std::cout << "Test OK1" << a << std::endl; }
Voila là j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #ifndef DEF_CLASS2 #define DEF_CLASS2 class Class2{ public: Class2(std::string a); }; #endif
class1.cpp.text+0x4c) : référence indéfinie vers « Class1::class2(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) »
Si quelqu'un pouvait m'aider je vous remercie mille fois d'avance....vu le nombre d'heures que je suis sur ce problème...
PS : je précise qu'on peut exclure les erreurs dues à des problème de compilations je compile de la manière suivante : g++ main.cpp class1.cpp class2.cpp -o test
Partager