【发布时间】:2010-12-28 01:23:26
【问题描述】:
我遇到了一个我无法理解的编译错误(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。我在这里错过了什么?
【问题讨论】:
-
C 语法生锈了,所以不作为答案添加,不应该是“return (*(p->pfn))(val);”吗? ——
-
不,这会产生错误“* 在 C::PFN 类型的操作数上非法”。
标签: c++ compiler-errors member-function-pointers