Je reçois une erreur de compilation (MS VS 2008) que je ne comprends pas. Après avoir joué pendant de nombreuses heures, tout est flou et j'ai l'impression qu'il y a quelque chose de très évident (et très stupide) qui me manque. Voici le code essentiel:Comment appeler une fonction pointeur vers membre?
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;
}
Les revendications compilateur à la flèche que le « terme ne pas prendre une fonction 1 argument ». Pourquoi pas? PFN est prototypé comme une fonction prenant un argument, et MAP_ENTRY.pfn est un PFN. Qu'est-ce que j'oublie ici?
La syntaxe C est rouillée, donc ne pas ajouter comme réponse, ne devrait-elle pas être "return (* (p-> pfn)) (val);"? - –
Non, cela donne l'erreur "* illégal sur les opérandes de type C :: PFN". – chrisd
duplication possible de [Appelant des méthodes de classe C++ via un pointeur de fonction] (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a-function-pointer) –