Ricevo un errore di compilazione (MS VS 2008) che non capisco. Dopo averci lavorato per molte ore, è tutto sfocato e sento che c'è qualcosa di molto ovvio (e molto stupido) che mi manca. Ecco il codice essenziale:Come si chiama una funzione pointer-to-member?
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;
}
Le rivendicazioni del compilatore in corrispondenza della freccia che il "termine non restituisce una funzione di prendere 1 argomento". Perchè no? PFN è prototipato come una funzione che accetta un argomento e MAP_ENTRY.pfn è un PFN. Cosa mi manca qui?
La sintassi C è arrugginita, quindi non aggiungere come risposta, nel caso non fosse "return (* (p-> pfn)) (val);"? - –
No, che restituisce l'errore "* non valido sugli operandi di tipo C :: PFN". – chrisd
possibile duplicato di [Richiamo dei metodi di classe C++ tramite un puntatore di funzione] (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a-function-pointer) –