c – 如何调用指针到成员函数?
发布时间:2020-12-16 05:53:26 所属栏目:百科 来源:网络整理
导读:我正在收到一个我不明白的编译错误(MS VS 2008).在搞砸了很多个小时之后,这些都是模糊的,我觉得有一些非常明显的(非常愚蠢的)我失踪了.这是基本代码: typedef int (C::*PFN)(int);struct MAP_ENTRY { int id; PFN pfn; };class C { ... int Dispatch(int,in
我正在收到一个我不明白的编译错误(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.我在这里缺少什么? 解决方法
p> pfn是指针到成员函数类型的指针.为了通过这样一个指针调用一个函数,你需要使用一个运算符 – > *或者操作符*,并提供一个类型为C的对象作为左操作数.你没有
我不知道C中应该使用哪个对象 – 只有你知道 – 但在你的例子中,它可能是*这个.在这种情况下,呼叫可能如下所示 (this->*p->pfn)(val) 为了使它看起来不那么复杂,你可以引入一个中间变量 PFN pfn = p->pfn; (this->*pfn)(val); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |