Ver Mensaje Individual
  #1  
Antiguo 12-04-2011
robinsongm robinsongm is offline
Miembro
 
Registrado: sep 2004
Ubicación: Madrid, España
Posts: 25
Reputación: 0
robinsongm Va por buen camino
Question constructor con parámetros que son funciones

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!!
__________________
Ni la utilidad del mentir es sólida, ni el mar de la verdad perjudica mucho tiempo.
Responder Con Cita