chr*_*isd 10 c++ compiler-errors member-function-pointers
我收到了一个我不明白的编译错误(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;
}
Run Code Online (Sandbox Code Playgroud)
编译器在箭头处声称"术语不评估为采用1参数的函数".为什么不?PFN原型为带有一个参数的函数,MAP_ENTRY.pfn是PFN.我在这里错过了什么?
AnT*_*AnT 17
p->pfn是指向成员函数类型的指针.为了通过这样的指针调用函数,您需要使用运算符->*或运算符,.*并提供类型的对象C作为左操作数.你没有.
我不知道C在这里应该使用哪种类型的对象- 只有你知道 - 但在你的例子中它可能是 *this.在这种情况下,呼叫可能如下所示
(this->*p->pfn)(val)
Run Code Online (Sandbox Code Playgroud)
为了使它看起来有点复杂,你可以引入一个中间变量
PFN pfn = p->pfn;
(this->*pfn)(val);
Run Code Online (Sandbox Code Playgroud)