0

上で述べたように、エラーが発生します: mHbbtSMFnPtrs[mCurrHbbtvState][hbbtvSMEvntsParam](hbbtvSMEvents, hbbtvSMEvntsParam); の operator[] に一致しません。

typedef int (*HBBTVSMFnPtr)(int hbbtvSMEvent, HBBTVSMEvntParam smEvntParam );
static int HBBTVSMErrorHandler(int hbbtvSMEvent, HBBTVSMEvntParam smEvntParam);

宣言:

static HBBTVSMFnPtr mHbbtSMFnPtrs[HBBTV_SM_STATE_MAXSTATES][HBBTV_SM_EVNT_MAXEVNTS];
static int mCurrHbbtvState = HBBTV_SM_STATE_TURNEDOFF; 
 typedef struct
 {
char* param;
int   paramLength;
}HBBTVSMEvntParam;

それは割り当てです:

mHbbtSMFnPtrs[loopVar1][loopVar2] = HBBTVSMErrorHandler;

そしてそれを次のように呼び出します:

int a = mHbbtSMFnPtrs[mCurrHbbtvState][hbbtvSMEvntsParam](hbbtvSMEvents, hbbtvSMEvntsParam);
4

1 に答える 1

2

変数の宣言が表示されない場合、最も可能性の高い問題は次のとおりです。

  • mHbbtSMFnPtrs関数ポインターの 2 次元配列 (または同様のコンテナー) ではない、または
  • mCurrHbbtvStateorhbbtvSMEvntsParamは整数またはスコープなしの列挙型ではないため、配列インデックスとして使用できません。

割り当て行からエラーが発生しない場合は、2 番目のエラーの可能性が高くなります。

これらの宣言を投稿できれば、どちらが当てはまるかがわかります。また、読みやすい名前を使用することを検討する必要があります。これにより、このような問題を見つけやすくなります。

于 2013-05-03T11:00:41.393 に答える