2014-05-15 161 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 –