Получавам грешка при компилиране (MS VS 2008), която просто не разбирам. След като се забърквах с него в продължение на много часове, всичко е размазано и имам чувството, че има нещо много очевидно (и много глупаво), което пропускам. Ето основния код:
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;
}
Компилаторът твърди на стрелката, че „терминът не се оценява на функция, приемаща 1 аргумент“. Защо не? PFN е прототип като функция, приемаща един аргумент, а MAP_ENTRY.pfn е PFN. Какво ми липсва тук?