我有一个指向类中定义的成员函数的指针,例如:
class Example {
void (Example::*foo)();
void foo2();
};
在我的主代码中,我将foo设置为:
Example *a;
a->foo = &Example::foo2;
然而,当我试着打电话给foo:
a->foo();
我得到以下编译时错误:"错误:明显调用的括号前面的表达式必须具有(指针到)函数类型"。我假设我在某处弄错了语法,有人可以向我指出吗?
答案 0 :(得分:13)
调用它你会做:(a->*(a->foo))()
(a->*X)(...)
- 取消引用成员函数指针 - a->*X
周围的parens对优先级很重要。
X = a->foo
- 在您的示例中。
请参阅ideone here了解工作示例