Ik heb twee klassen in hetzelfde .cpp-bestand:
// forward
class B;
class A {
void doSomething(B * b) {
b->add();
}
};
class B {
void add() {
...
}
};
De forward werkt niet, ik kan niet compileren.
Ik krijg deze foutmelding:
error: member access into incomplete type 'B'
note: forward declaration of 'B'
Ik gebruik clang-compiler (clang-500.2.79).
Ik wil niet meerdere bestanden (.cpp en .hh) gebruiken, ik wil slechts op één .cpp coderen.
Ik kan de klasse B niet vóór de klasse A schrijven.
Heb je enig idee hoe ik mijn probleem kan oplossen?
Antwoord 1, autoriteit 100%
Verplaats de doSomething
-definitie buiten de klassendeclaratie en na B
en maak ook add
toegankelijk voor A
door public
-ing it of friend
-ing it.
class B;
class A
{
void doSomething(B * b);
};
class B
{
public:
void add() {}
};
void A::doSomething(B * b)
{
b->add();
}
Antwoord 2, autoriteit 30%
Je moet de definitievan klasse B
hebben voordat je de klasse gebruikt. Hoe zou de compiler anders weten dat er zo’n functie als B::add
bestaat?
Definieer klasse B
vóór klasse A
, of verplaats de hoofdtekst van A::doSomething
naar na klasse B
zijn gedefinieerd, zoals
class B;
class A
{
B* b;
void doSomething();
};
class B
{
A* a;
void add() {}
};
void A::doSomething()
{
b->add();
}