【发布时间】:2013-09-11 13:58:14
【问题描述】:
协议.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;
设备.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 原型在结构初始化之前可用吗?
-
@NemanjaBoric 你确定吗?结构 typedef 不完整。
-
需要在
sDevice初始化之前为I2c_Send添加原型。 -
到目前为止发布的所谓“欺骗”都与这个问题没有任何关系。上面发布的代码是正确的,所有初始化程序实际上都是常量(特别是地址常量)。它并没有真正在 VS 中产生“初始化程序不是常量”错误。显然,代码不准确和/或不相关。
-
@SHRI - 为了清楚起见,建议使用原型,但不是严格要求。但是函数定义的可见性是,然后才能在任何地方使用。例如,在您的代码中,如果函数本身从 .c 中删除,并放入 .h(替换原型),它将编译和构建。因此,在您的情况下,可见性是限制问题。在大多数编译器中,有些设置允许您省略原型。不过不推荐。查看 here 以了解有关原型的良好讨论。
标签: c visual-studio-2010