2014-09-25 61 views
1

我從這段代碼的xcode中獲得預期的非限定id。 我正在使用cocos2d-x 3.x,但它與此問題無關。如何調用成員函數的指針C++

在CCNode.h

virtual float getGlobalZOrder() const { return _globalZOrder; } 

在我的cpp

typedef float (Node::*SomeFunc)() const; 
SomeFunc f = &Node::getGlobalZOrder; 
Node * node = .....; 
node->(*f)(); <-Expected unqualified-id 

爲什麼我得到的編譯錯誤?

回答

0

指向成員的引用操作符(如.*->*)是一個整數運算符,您不能通過()將它們分開。你可以試試這個:

(node->*f)(); 
+0

OMG你的代碼工作!我嘗試過(節點 - >(* f))();它給出了錯誤...爲什麼它不喜歡()之後 - > .. – h5nc 2014-09-25 07:48:38

+0

@ h5nc因爲' - > *'是C++中的一個實際的整體運算符,並且通過使用pars切割它, 「通過指針調用成員函數」到某些沒有意義的事情。 – 2014-09-25 08:07:32

0

使用如下:

typedef float (Node::*SomeFunc)() const; 
SomeFunc f = &Node::getGlobalZOrder; 
Node * node = new Node(); 
float x = (node->*f)();