我已经扫描了大多数指针初始化警告和结构初始化问题,但似乎没有什么能完全解决我的问题。
我的问题与用户 bhinesley 于 2011 年 7 月 27 日 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] ;
我在源代码中定义了函数,然后将它们的 defn 复制到同一个头文件中,并将它们声明为 extern(在数组的 extern 下面):
extern int CRChndshakeMake(PktDescriptr usbPkt, ringbuffr* usbPktpload, int* CRCcalc) ;
extern int CRChndshakeCheck(PktDescriptr usbPkt, ringbuffr* usbPktpload,int*CRCcalc) ;
等等
它编译正常,但给出可怕的警告:初始化形式不兼容的指针类型我尝试按成员名称分配以及省略 & (请参阅第二个数组元素)
出了什么问题,我该如何解决?