使用C++的函数指针出错

Dex*_*ter -1 c++

为什么以下代码会导致错误:

class A {

public:
        typedef void (A::*funptr)(void);

        void fun(void ) {
                cout << " Fun Call " <<endl;
        }

        void foo(void ) {
                cout << " Foo Call " <<endl;
        }

        funptr p[2];
        funptr q;

        A()
        {
                p[0]=&A::foo;
                p[1]=&A::fun;
                q   =&A::fun;
        }
};


int main ()
{

A obj;

(obj.*q)(void);

//(obj.p[0])();
//(obj.p[1])();

return 0;
}
Run Code Online (Sandbox Code Playgroud)

Vau*_*ato 5

您需要像这样调用它:

(obj.*obj.q)();
Run Code Online (Sandbox Code Playgroud)

.*运算符不在右侧使用成员名称,而是在计算成员指针的表达式.当你写这个:

(obj.*q)();
Run Code Online (Sandbox Code Playgroud)

它正在寻找一个名为q的变量,但是范围内没有这样的变量.