我已经阅读了关于这个主题的其他答案,但他们没有帮助我。 我试图初始化一个结构但在C中得到以下错误信息:
错误:初始化元素不是常量
错误:(接近初始化'resource01.resource.role')
对于Url,它起作用,它只是不起作用的角色。如果我将角色定义为char,我没有任何问题。我究竟做错了什么?
static char const resource01Url[] = "/dummy";
static int const resource01Role = 2;
static struct RestResourceNode_S resource01 =
{
{
resource01Url,
resource01Role,
&DummyHandler_call
},
NULL
};
static struct RestResourcesManager_S resourcesManager =
{
&resource01, &resource01
};
定义了RestResourceNode_S类型:
struct RestResourceNode_S
{
RestResource_T resource;
struct RestResourceNode_S const *next;
}
和RestResource_t:
struct RestResource_S
{
char const *url;
int const *role;
retcode_t (*handle)(Msg_T *);
};
typedef struct RestResource_S RestResource_T;
答案 0 :(得分:1)
错误意味着您正在使用非常量表达式来初始化结构成员。
表达式为resource01Role
。
虽然它被声明为static
和const
,但它不是C编译器视图中的初始化程序常量表达式。如果要以这种方式使用它,则必须将其定义为预处理器宏。在您的情况下,const
仅向编译器指出resource01Role
的值不会更改 - 它不允许它在编译时使用该值。
但是,正如@WhozCraig指出的那样,角色的类型实际上是int const *
,所以你可能想写&resource01Role
。 Adress-of 是一个常量表达式,因此可以编译。
由于resource01Url
是一个数组,因此编译器会隐式应用地址运算符&
,因此它是常量。