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 : 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.cpp

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 class1.hpp

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
Le fichier class2.cpp :

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;
 
}
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
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 : 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.cpp :

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 class1.hpp :

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
le fichier class2.cpp :

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;
 
 
}
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
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