c++ forward-declaration

c++ - error: acceso de miembro en tipo incompleto: declaración de reenvío de



forward-declaration (2)

Tengo dos clases en el mismo .cpp así:

//forward class B; class A { void doSomething(B * _b) { _b->add(); } }; class B { void add() { ... } };

El delantero no funciona, no puedo compilar.

Tengo este error:

error: member access into incomplete type ''B'' note: forward declaration of ''B''

Estoy usando el compilador clang (clang-500.2.79).

No quiero usar varios archivos (.cpp y .hh), me gustaría codificar solo en un .cpp.

No puedo escribir la clase B antes de la clase A.

¿Tienes alguna idea para resolver mi problema?

Atentamente.


Debe tener la definición de clase B antes de usar la clase. ¿De qué otra manera sabría el compilador que existe una función como B::add ?

Defina la clase B antes que la clase A o mueva el cuerpo de A::doSomething a después de que se haya definido la clase B , como

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


Mueva doSomething definition fuera de su declaración de clase y después de B y también haga que add accesible a A publicándola o haciéndola friend .

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