es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la sintaxis correcta para la lista de punteros a funciones con miembros de clase?

Tengo una lista de punteros a funciones, la no perteneciente a una clase se compila sin errores, pero la perteneciente a una clase se compila con errores:

error: no se puede convertir ‘void (CVdmConfig::)()’ en ‘fp {aka void ()()}’ en la inicialización

CVdmConfig::writeConfig es una función void.

typedef void (*fp)();
fp fpList[] = {&valvesCalib, &CVdmConfig::writeConfig};

¿Qué estoy haciendo mal?
Saludos cordiales,
Werner

Tags:  

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema con la conversión de tipo de un puntero a una función miembro a un puntero a una función regular. Esto se debe a que un puntero a una función miembro no es lo mismo que un puntero a una función regular.

    Para solucionar este problema, debes utilizar los operadores de puntero a miembro, como .* y ->*. Estos operadores te permiten llamar a una función miembro a través de un puntero.

    En este caso, dado que CVdmConfig::writeConfig es una función miembro, debes modificar la definición de fp para que sea un puntero al tipo de función miembro de la clase CVdmConfig. Por ejemplo:

    typedef void (CVdmConfig::*mfptr)();
    mfptr mfptrList[] = {&CVdmConfig::writeConfig};
    

    Luego, para llamar a la función miembro a través del puntero, necesitarás tener una instancia de CVdmConfig para utilizar. Por ejemplo:

    CVdmConfig config;
    (config.*mfptrList[0])();
    

    Esto llamaría a la función miembro writeConfig de config.

Comments are closed.