Ich erhalte einen Kompilierfehler (MS VS 2008), den ich einfach nicht verstehe. Nachdem ich viele Stunden damit herumgespielt habe, ist alles verschwommen und ich habe das Gefühl, dass etwas sehr offensichtlich (und sehr dumm) ist, dass ich vermisse. Hier ist der wesentliche Code:Wie rufe ich eine Zeiger-zu-Stab-Funktion auf?
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;
}
Der Compiler Ansprüche auf den Pfeil, der die „Begriff nicht auf eine Funktion unter 1 Argument wertet“. Warum nicht? PFN wird als Funktion für ein Argument erstellt, und MAP_ENTRY.pfn ist ein PFN. Was fehlt mir hier?
C-Syntax ist rostig, also nicht als Antwort hinzufügen, sollte es nicht "return (* (p-> pfn)) (val);"? - –
Nein, das ergibt den Fehler "* illegal bei Operanden vom Typ C :: PFN". – chrisd
mögliches Duplikat von [Aufruf von C++ - Klassenmethoden über einen Funktionszeiger] (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a-function-pointer) –