Appeler une classe dans une autre
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
Code:
1 2 3 4 5 6 7
| #include <iostream>
#include "class1.hpp"
int main(){
Class1 class1;
return EXIT_SUCCESS;
} |
Le fichier class1.cpp
Code:
1 2 3 4 5 6 7 8 9
| #include <iostream>
#include "class1.hpp"
Class1 :: Class1(){
class2;
} |
Le fichier class1.hpp
Code:
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 |
Le fichier class2.cpp :
Code:
1 2 3 4 5 6 7 8
| #include <iostream>
#include "class2.hpp"
Class2 :: Class2(){
std::cout << "Test OK1" << std::endl;
} |
Et enfin le fichier class2.hpp :
Code:
1 2 3 4 5 6 7 8 9 10
| #ifndef DEF_CLASS2
#define DEF_CLASS2
class Class2{
public:
Class2();
};
#endif |
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 :
le fichier main.cpp :
Code:
1 2 3 4 5 6 7
| #include <iostream>
#include "class1.hpp"
int main(){
Class1 class1;
return EXIT_SUCCESS;
} |
le fichier class1.cpp :
Code:
1 2 3 4 5 6 7 8 9
| #include <iostream>
#include "class1.hpp"
Class1 :: Class1(){
class2("hello");
} |
le fichier class1.hpp :
Code:
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 |
le fichier class2.cpp :
Code:
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;
} |
et enfin le fichier class2.hpp :
Code:
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 |
Voila là j'ai le message d'erreur suivant :
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