如何调用成员函数C ++的指针[重复]

Posted

技术标签:

【中文标题】如何调用成员函数C ++的指针[重复]【英文标题】:How to call a pointer of member function C++ [duplicate] 【发布时间】:2014-09-25 07:37:54 【问题描述】:

我从这段代码的 xcode 中得到 Expected unqualified-id。 我正在使用 cocos2d-x 3.x 但它与这个问题无关。

在 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

为什么会出现编译错误?

【问题讨论】:

【参考方案1】:

.*-&gt;* 等指向成员的解引用运算符是一个整数运算符,不能用() 分隔它们。你可以试试这个:

(node->*f)();

【讨论】:

天哪,您的代码有效!我试过 (node->(*f))();它给出了错误......为什么它在 ->.. 之后不喜欢 () @h5nc 因为-&gt;* 是 C++ 中的一个实际的完整运算符,并且通过使用 pars 将其拆分,您将含义从“通过指针调用成员函数”更改为没有意义的东西.【参考方案2】:

使用如下:

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

【讨论】:

以上是关于如何调用成员函数C ++的指针[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在线程中调用其他类的成员函数和变量

如何从另一个成员函数调用成员函数指针?

如何从静态成员函数调用指向成员函数的指针?

C函数中如何调用未实例化类的成员函数

c++类的成员函数指针如何转为普通指针

如何通过保存在容器中的成员指针函数调用?