指向成员函数的函数指针

指向成员函数的函数指针

我希望将函数指针设置为一个类的成员,它是指向同一个类中另一个函数的指针。我这么做的原因很复杂。

在本例中,我希望输出为“1”。

class A {public:
 int f();
 int (*x)();}int A::f() {
 return 1;}int main() {
 A a;
 a.x = a.f;
 printf("%d\n",a.x())}

但这在编译上失败了。为什么?


aluckdog
浏览 600回答 3
3回答

三国纷争

语法不对。成员指针是与普通指针不同的类型类别。成员指针必须与其类的对象一起使用:class&nbsp;A&nbsp;{public: &nbsp;int&nbsp;f(); &nbsp;int&nbsp;(A::*x)();&nbsp;//&nbsp;<-&nbsp;declare&nbsp;by&nbsp;saying&nbsp;what&nbsp;class&nbsp;it&nbsp;is&nbsp;a&nbsp;pointer&nbsp;to};int&nbsp;A::f()&nbsp;{ &nbsp;return&nbsp;1;}int&nbsp;main()&nbsp;{ &nbsp;A&nbsp;a; &nbsp;a.x&nbsp;=&nbsp;&A::f;&nbsp;//&nbsp;use&nbsp;the&nbsp;::&nbsp;syntax &nbsp;printf("%d\n",(a.*(a.x))());&nbsp;//&nbsp;use&nbsp;together&nbsp;with&nbsp;an&nbsp;object&nbsp;of&nbsp;its&nbsp;class}a.x还没有说明要调用哪个对象。它只表示要使用存储在对象中的指针。a..预演a另一次作为左操作数到.*运算符将告诉编译器调用函数的对象。

慕莱坞森

int (*x)()不是指向成员函数的指针。指向成员函数的指针如下所示:int (A::*x)(void) = &A::f;.
打开App,查看更多内容
随时随地看视频慕课网APP