fout: lidtoegang tot onvolledig type: aangifte doorsturen van

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 Ben maak ook addtoegankelijk voor Adoor 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 Bhebben voordat je de klasse gebruikt. Hoe zou de compiler anders weten dat er zo’n functie als B::addbestaat?

Definieer klasse Bvóór klasse A, of verplaats de hoofdtekst van A::doSomethingnaar na klasse Bzijn gedefinieerd, zoals

class B;
class A
{
    B* b;
    void doSomething();
};
class B
{
    A* a;
    void add() {}
};
void A::doSomething()
{
    b->add();
}

Other episodes