2013-07-20 77 views
2

我已經掃描了大部分指針初始化警告和結構初始化問題,但沒有什麼似乎相當數學我的問題。警告:從不兼容的指針類型初始化 - 如何初始化包含函數指針的結構數組

我的問題是最相似的,用戶bhinesley要求7月27 '11在23:28。但在我的情況下,我的結構只包含函數指針 - 其中2個。

我聲明它像這樣在我的報頭:

typedef int (*CRCchecker)(PktDescriptr, ringbuffr, int); type 

typedef struct 
{ 
    CRCchecker CRCcheckPROC ;//(PktDescriptr, ringbuffr, int); 
    CRCchecker CRCmakePROC ; //(PktDescriptr, ringbuffr, int); 
} PIDprocs; 

然後,定義了,在我的源文件這樣初始化它:

PIDprocs CRCcheckrs[16] ={ 
{NULL, NULL}, 
{CRCtokenCheck, CRCtokenMake}, 
{&CRChndshakeCheck, &CRChndshakeMake}, 
{&CRCdataCheck, &CRCdataMake}, 
{&CRCtokenCheck, &CRCtokenMake}, 
{&CRCtokenCheck, &CRCtokenMake}, 
{&CRChndshakeCheck, &CRChndshakeMake}, 
{&CRCdataCheck, &CRCdataMake}, 
{&CRCsplitCheck, &CRCsplitMake}, 
{&CRCtokenCheck, &CRCtokenMake}, 
{&CRChndshakeCheck, &CRChndshakeMake}, 
{&CRCdataCheck, &CRCdataMake}, 
{&CRCtokenCheck, &CRCtokenMake}, 
{&CRCtokenCheck, &CRCtokenMake}, 
{&CRChndshakeCheck, &CRChndshakeMake}, 
{&CRCdataCheck, &CRCdataMake}}; 

我聲明在相同的報頭中的陣列爲extern文件(在上面的typedefs之後):

extern PIDprocs CRCcheckrs[16] ; 

我定義了源代碼中的函數t母雞複製其DEFN到相同的頭文件,並宣佈他們爲extern(將extern用於陣列下文):

extern int CRChndshakeMake(PktDescriptr usbPkt, ringbuffr* usbPktpload, int* CRCcalc) ; 
extern int CRChndshakeCheck(PktDescriptr usbPkt, ringbuffr* usbPktpload,int*CRCcalc) ; 

它編譯確定,但給出的可怕警告:初始化形式兼容的指針類型 我嘗試通過成員名稱分配以及忽略&(請參閱第二個數組元素)

什麼是錯誤的,我該如何解決它?

回答

3
int CRChndshakeMake(PktDescriptr usbPkt, ringbuffr* usbPktpload, int* CRCcalc) 

與您的聲明不符;

typedef int (*CRCchecker)(PktDescriptr, ringbuffr, int); 

這顯然不同意某些指針。

+0

謝謝,那就是問題所在。 – DRD