J'ai deux classes dans le même fichier .cpp:
// forward
class B;
class A {
void doSomething(B * b) {
b->add();
}
};
class B {
void add() {
...
}
};
Le forward ne fonctionne pas, je ne peux pas compiler.
Je reçois cette erreur:
error: member access into incomplete type 'B'
note: forward declaration of 'B'
J'utilise le compilateur Clang (clang-500.2.79).
Je ne veux pas utiliser plusieurs fichiers (.cpp et .hh), j'aimerais coder uniquement sur un .cpp.
Je ne peux pas écrire la classe B avant la classe A.
Avez-vous une idée de la façon de résoudre mon problème?
Déplacez doSomething
définition en dehors de sa déclaration de classe et après B
et rendez également add
accessible à A
par public
-ing ou friend
- le.
class B;
class A
{
void doSomething(B * b);
};
class B
{
public:
void add() {}
};
void A::doSomething(B * b)
{
b->add();
}
Vous devez avoir le définition de la classe B
avant de pouvoir utiliser la classe. Sinon, comment le compilateur saurait-il qu'il existe une fonction telle que B::add
?
Définissez la classe B
avant la classe A
ou déplacez le corps de A::doSomething
après la classe B
ont été définis, comme
class B;
class A
{
B* b;
void doSomething();
};
class B
{
A* a;
void add() {}
};
void A::doSomething()
{
b->add();
}