2014-05-15 162 views
6

我有一个指针指向一个类中定义成员函数,例如:调用指针到成员函数C++

class Example { 
    void (Example::*foo)(); 

    void foo2(); 
}; 

以我主代码,我然后设置FOO为:

Example *a; 
a->foo = &Example::foo2; 

然而,当我尝试调用foo:

a->foo(); 

我得到以下编译时错误:“错误:明显的呼叫前面的表达式括号必须有(指针)功能类型“。我假设我得到的语法错了某处,有人可以指出我吗?

+4

'见ideone here? –

+0

不幸的是,这是行不通的。 a - > * foo()返回“错误:foo未定义”,并且 - > *(a-> foo)()会给出原始错误消息。 – wolfPack88

+3

因为运算符的优先级如何工作,所以你需要''a - > *(a-> foo)'左边的parens –

回答

13

调用它,你会怎么做:(a->*(a->foo))()

(a->*X)(...) - 解引用一个成员函数指针 - 在括号周围a->*X是优先重要的。

X = a->foo - 在你的例子中。 ( - > *(A->富)一)()` - 我认为

的工作示例

+1

请参阅C++常见问题解答以获取工作示例和讨论:http://www.parashift.com/ C++ - FAQ /指针到members.html –