带有C++的函数指针中的错误

Error in Function pointers with C++

本文关键字:错误 指针 函数 C++ 带有      更新时间:2023-10-16

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

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;
}

你需要这样称呼它:

(obj.*obj.q)();

.* 运算符不采用右侧的成员名称,而是采用计算结果为成员指针的表达式。 当你写这个的时候:

(obj.*q)();

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

将所有出现的(void)更改为()。在声明中它是多余的,在调用本身上是不允许的。