初始化结构

时间:2014-04-14 09:38:30

标签: c pointers struct

我正在尝试初始化结构但在C中获得以下错误消息:

错误:初始化元素不是常量

错误:(接近初始化' resource01.resource.role')

对于Url,它起作用,它只是不起作用的角色。首先,我有一个关于角色的指针,我分配了变量的地址。我删除了指针,因为我不需要它,我只能为变量赋值。我做错了什么?

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;

2 个答案:

答案 0 :(得分:0)

int const在C中不算作编译时常量。您必须将其更改为#define

答案 1 :(得分:0)

C99标准§6.7.8¶4说

  

具有静态的对象的初始值设定项中的所有表达式   存储持续时间应为常量表达式或字符串文字。

此外,const在C中不是真正的常量,因为它们不是编译时常量。这意味着您不能在具有静态存储分配的结构的初始值设定项中具有常量对象。但是,如果您的结构具有自动存储分配,这将正常工作。

您可以做的是将您的const个对象定义为宏 -

#define resource01Url "/dummy"
#define resource01Role 2