Bonjour,
Voici un cas d'école afin d'illustrer le plus simplement possible mon problème:
Je rencontre des difficultés à passer un pointeur de class1 au constructeur de class2.
L'objectif est que class2 puisse appeler une méthode de class1.
Voici le code:
class1.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef CLASS1_H #define CLASS1_H #include <iostream> #include "class2.h" using namespace std; class class1 { public: class1(); void methodAlpha(); private: class2 *m_obj_class2; }; #endif // CLASS1_H
class1.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include "class1.h" class1::class1() { cout << "instanciated class 1!" << endl; m_obj_class2 = new class2(this); // J'instancie un objet de type class2, en passant un pointeur sur class1 methodAlpha(); } void class1::methodAlpha() { cout << "class1::methodAlpha() can call class2::methodBeta()" << endl; m_obj_class2->methodBeta(); }
class2.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef CLASS2_H #define CLASS2_H #include <iostream> #include "class1.h" // J'inclus le prototype de class1... using namespace std; class class2 { public: class2(class1 *parent); // ...afin que le type soit reconnu ici void methodBeta(); private: class1 *m_obj_class1; // ...et ici }; #endif // CLASS2_H
class2.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include "class2.h" class2::class2(class1* parent) { m_obj_class1 = parent; cout << "instanciated class 2!" << endl; } void class2::methodBeta() { m_obj_class1->methodAlpha(); }
À la compilation, j'obtiens les deux erreurs suivantes:
class2.h:12:19: error: expected ')' before '*' token
class2.h:17:5: error: 'class1' does not name a type
J'ai commenté temporairement le #include "class1.h" du fichier class2.h, juste pour voir, et j'obtiens les mêmes erreurs.
Je pense qu'il y a un conflit avec les inclusions suivantes:
dans class1.h > #include "class2.h".
dans class2.h > #include "class1.h"Du coup j'ai tenté ceci en même lieu et place, c'est pareil...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #ifndef CLASS1_H #define CLASS1_H #include "class1.h" #endif
Comment procéderiez vous pour faire fonctionner ce code?
PS: C'est étrange, habituellement je travaille avec des classes Qt (QWidget, QDialog, ...) et je suis sûr d'avoir déjà effectué des choses du genre, sans souci...
Partager