Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用指向成员函数C++;_C++_Function Pointers - Fatal编程技术网

C++ 调用指向成员函数C++;

C++ 调用指向成员函数C++;,c++,function-pointers,C++,Function Pointers,我有一个指向类中定义的成员函数的指针,例如: class Example { void (Example::*foo)(); void foo2(); }; 在我的主代码中,我将foo设置为: Example *a; a->foo = &Example::foo2; 但是,当我试着给foo打电话时: a->foo(); 我得到以下编译时错误:“错误:显然调用的括号前面的表达式必须具有(指向-)函数类型”。我假设我在某个地方把语法弄错了,有人能给我指出来吗?

我有一个指向类中定义的成员函数的指针,例如:

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

   void foo2();
};
在我的主代码中,我将foo设置为:

Example *a;
a->foo = &Example::foo2;
但是,当我试着给foo打电话时:

a->foo();

我得到以下编译时错误:“错误:显然调用的括号前面的表达式必须具有(指向-)函数类型”。我假设我在某个地方把语法弄错了,有人能给我指出来吗?

称之为:
(a->*(a->foo))()

(a->*X)(…)
-取消对成员函数指针的引用-a->*X周围的参数对于优先级很重要

X=a->foo
-在您的示例中


查看ideone的工作示例

(a->*(a->foo))()
-我想?不幸的是,这不起作用。a->*foo()返回“error:foo未定义”,a->*(a->foo)给出原始错误消息。由于运算符优先级的工作方式,您需要对
a->*(a->foo)
进行调整,如果将成员函数绑定到类似
std::function
,则不必担心奇怪的语法,但是,你会稍微支付间接开销的开销。检查C++常见问题:参见C++ FAQ的工作示例和讨论: