0

構造体を定義するこのコードがあります (着信は単純な構造体です)

#define FUNCS_ARRAY 3

    struct func
    {
        void (AA::*f) (incoming *);
        int arg_length;
    };

    func funcs[FUNCS_ARRAY];

次に、クラス AA 本体で、ポインター配列を次のように定義します。

funcs[0] = { &AA::func1, 4 };
funcs[1] = { &AA::func2, 10 };
funcs[2] = { &AA::func2, 4 };

配列 im を介して関数の 1 つを呼び出そうとすると、コンパイル エラーが発生します

(*funcs[p->req]->*f)(p);  

このエラーが発生しています:

error: no match for ‘operator*’ in ‘*((AA*)this)->AA::funcs[((int)p->AA::incoming::req)]’

このように呼び出そうとすると:
(funcs[p->req]->*f)(p);
私は得ています:

error: ‘f’ was not declared in this scope

私がこれを試すとき:

   (funcs[p->req].f)(p);

error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘((AA*)this)->AA::funcs[((int)p->AA::incoming::req)].AA::func::f (...)’, e.g. ‘(... ->* ((AA*)this)->AA::funcs[((int)p->AA::incoming::req)].AA::func::f) (...)’

struct 側で関数ポインタにアクセスする正しい方法は何ですか?

4

1 に答える 1

3

メンバー関数へのポインターを介してメンバー関数を呼び出すには、そのポインターと適切なクラスのインスタンスが必要です。

あなたの場合、メンバーへのポインターはであり、呼び出されfuncs[i].fた のインスタンスがあると仮定します。次に、次のようにその関数を呼び出すことができます。AAaa

(aa.*(funcs[p->req].f))(p);

aaが AA へのポインターである場合、構文は次のようになります。

(aa->*(funcs[p->req].f))(p);

の (非静的) メンバー関数内から呼び出している場合はAA、次を試してください。

(this->*(funcs[p->req].f))(p);
于 2012-07-21T14:35:54.530 に答える