2012-08-30 43 views
46

我想用成員函數指針做一些測試。這段代碼有什麼問題? bigCat.*pcat();語句不編譯。如何通過成員函數指針調用?

class cat { 
public: 
    void walk() { 
     printf("cat is walking \n"); 
    } 
}; 

int main(){ 
    cat bigCat; 
    void (cat::*pcat)(); 
    pcat = &cat::walk; 
    bigCat.*pcat(); 
} 

回答

77

更多括號是必需的:

(bigCat.*pcat)(); 
^   ^

函數調用(())具有比指針到構件結合運算符(.*)更高的優先級。一元運算符優先於二元運算符。

+0

@AdrianCornish:沒有,但'pcat'沒有命名一個成員,它在'main'中聲明瞭作爲局部變量聲明的指向成員的指針。 –

+0

你甚至可以稱爲這樣的成員函數(從未嘗試過) –

+2

@AdrianCornish:是的。 –