Recibo un error de compilación (MS VS 2008) que simplemente no entiendo. Después de jugarlo durante muchas horas, todo está borroso y siento que hay algo muy obvio (y muy estúpido) que me estoy perdiendo. Aquí está el código esencial:¿Cómo llamo a una función de apuntador a miembro?
typedef int (C::*PFN)(int);
struct MAP_ENTRY
{
int id;
PFN pfn;
};
class C
{
...
int Dispatch(int, int);
MAP_ENTRY *pMap;
...
};
int C::Dispatch(int id, int val)
{
for (MAP_ENTRY *p = pMap; p->id != 0; ++p)
{
if (p->id == id)
return p->pfn(val); // <--- error here
}
return 0;
}
Las reclamaciones del compilador en la flecha que el "término no se evalúa a una función de tomar 1 argumento". Por qué no? PFN se prototipa como una función tomando un argumento, y MAP_ENTRY.pfn es un PFN. ¿Que me estoy perdiendo aqui?
La sintaxis de C está oxidada, por lo que no agrega como respuesta, ¿no debería ser "return (* (p-> pfn)) (val);"? - –
No, eso produce el error "* ilegal en operandos de tipo C :: PFN". – chrisd
posible duplicado de [Llamando a los métodos de la clase C++ a través de un puntero a la función] (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a-function-pointer) –