-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 に答える