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();
}