-1

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

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

2 回答 2

5

你需要这样称呼它:

(obj.*obj.q)();

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

(obj.*q)();

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

于 2012-05-05T13:47:47.453 回答
0

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

于 2012-05-05T13:57:45.963 回答