problème d'encapsulation de classes et d'accès aux méthodes
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:
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:
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:
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:
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:
Citation:
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:
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...