我收到一个我不明白的编译错误(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。我在这里想念什么?