2

ポインター初期化の警告と構造体初期化の質問のほとんどをスキャンしましたが、私の問題を完全に計算しているようには見えません。

私の質問は、11 年 7 月 27 日 23:28 にユーザー bhinesley によって尋ねられたものと最も似ています。しかし、私の場合、構造体には関数ポインターのみが含まれています-そのうちの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 として宣言しました (上記の typedef の後)。

extern PIDprocs CRCcheckrs[16] ;

ソース コードで関数を定義し、それらの定義を同じヘッダー ファイルにコピーして、extern (配列の extern の下) として宣言しました。

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

それは正常にコンパイルされますが、恐ろしい警告が表示されます: 初期化フォームに互換性のないポインター型があります & を除外するだけでなく、メンバー名による割り当ても試みました (2 番目の配列要素を参照)

何が問題で、どうすれば修正できますか?

4

1 に答える 1

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

あなたの宣言と一致しません。

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

どうやらいくつかの指針について意見が一致していないようです。

于 2013-07-20T18:14:33.680 に答える