構造体を定義するこのコードがあります (着信は単純な構造体です)
#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 側で関数ポインタにアクセスする正しい方法は何ですか?