Buenas!
Tengo la siguiente estructura de clases (obviamente es un esquema para representar la situación, no es mi código original):
Código:
class A
{
public:
A(void (*vEvent) (A *, char)): event_A(vEvent) {};
~A() {};
void (*publicEvent_A) (A *);
private:
void (*event_A) (A *, char);
void myProcedure ()
{
event_A (this, 'x');
}
};
class B
{
public:
B():
myA(event_B)
{
/* myA = new A(event_B); */
myA->publicEvent_A = myProcedure_B;
};
~B();
private:
A *myA;
void event_B (A *p1, char p2)
{
// hago cosassss...
};
void myProcedure_B (A *sender)
{
sender = sender; //do anything
};
};
El caso es que al compilar tengo un error como este (en las líneas que he resaltado en el código):
main.cpp:20: error: argument of type ‘void (B:: )(A*, char)’ does not match ‘A*’
main.cpp:23: error: argument of type ‘void (B:: )(A*)’ does not match ‘void (*)(A*)’
Entiendo lo que quiere decir, pero si por ejemplo solo declaro la clase A y en el main.cpp escribo:
Código:
void eventoA (A *sender, char p)
{
// codigo
}
void otroEventoA (A* sender)
{
// codigo
}
int main ()
{
A *myA = new A(eventoA);
myA->publicEventA = otroEventoA;
}
Esto anterior Sí funciona, si no existiese la clase B tal cual la tengo implementada.
¿Alguien puede decirme cómo corregir el error inicial (con ambas clases implementadas según el primer código)?
Tampoco deseo cambiar los niveles de seguridad mostrados, lo que está en public y private debe permanecer tal cual.
Gracias de antemano!!