2013-05-03 103 views
0

中的運算符[]不匹配如上所述,我收到錯誤消息:與mHbbtSMFnPtrs [mCurrHbbtvState] [hbbtvSMEvntsParam](hbbtvSMEvents,hbbtvSMEvntsParam)中的運算符[]不匹配。出現錯誤:

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); 
+0

向我們展示「mHbbtSMFnPtrs」是如何定義的。 – 2013-05-03 10:56:50

+0

請顯示'mHbbtSMFnPtrs'的*聲明*。 – trojanfoe 2013-05-03 10:57:13

+0

我懷疑這些人可能會喜歡一個更完整的堆棧跟蹤,並且如果可能的話查看「mHbbtSMFnPtrs」是什麼? – Tom 2013-05-03 10:57:34

回答

2

,最有可能的問題是:

  • mHbbtSMFnPtrs不是函數指針二維數組(或類似容器),或
  • 要麼mCurrHbbtvStatehbbtvSMEvntsParam不是整數或無作用域枚舉類型,所以不能用作數組索引。

如果您沒有從任務行中得到任何錯誤,那麼第二個更有可能。

如果您可以發佈這些聲明,那麼我們可以看到是這種情況。另外,你應該考慮使用可讀的名字 - 這會讓這類問題更容易被發現。

+0

+1我的投注是第一個選項。 – trojanfoe 2013-05-03 11:10:15

+0

添加了mHbbtSMFnPtrs的聲明 – harshalizee 2013-05-03 11:23:16

+0

@harshalizee:好的,這似乎消除了第一種可能性。什麼是「mCurrHbbtvState」和「hbbtvSMEvntsParam」? – 2013-05-03 11:24:54