错误C2099:初始化程序不是常量

Protocol.h

typedef struct sDevice_d { char name[24]; signed int (*Send)(unsigned char*, unsigned short); signed int (*Recv)(unsigned char*, unsigned short); } sDevice_d, *psDevice_d; 

Device.c

 #include "Protocol.h" sDevice_d sDevice = { "ten", I2c_Send }; psDevice_d psDevice = &sDevice; static signed int I2c_Send(unsigned char* buf, unsigned short len) { return 0; } 

在上面的代码中我收到以下错误:

错误C2099:初始化程序不是常量

请帮我解决这个问题。

我正在使用Visual Studio Win32应用程序。

在尝试使用初始化列表中的结构创建和初始化结构之前,需要定义和显示函数I2c_Send。 我在下面包含了对您的代码的修改,在两个文件中说明了这一点:

protocol.h

 typedef struct { char name[24]; signed int (*Send)(unsigned char*, unsigned short); signed int (*Recv)(unsigned char*, unsigned short); } S_DEVICE; //prototype here static signed int I2c_Send(unsigned char* buf, unsigned short len); 

device.c

 #include "protcol.h" S_DEVICE sDevice_d = {"ten", I2c_Send, I2c_Send}; int main(void) { return 0; } //define here static signed int I2c_Send(unsigned char* buf, unsigned short len) { return 0; } 

这个源使用ANCI C编译器(使用C99扩展)编译和构建,并且应该在Visual Studio,Win32环境中产生类似的结果。