如何在const结构中初始化union?

时间:2013-01-22 10:16:41

标签: c++

 const struct EbmlSyntax {
    uint32_t id;
    EbmlType type;
    int list_elem_size;
    int data_offset;
    union {
        uint64_t    u;
        double      f;
        const char *s;
        const struct EbmlSyntax *n;
    } def;
} ;

我必须使用上面的const结构,并希望使用

创建一个常量结构

{ EBML_ID_DOCTYPE, EBML_STR, 0, offsetof(Ebml,doctype), {.def.s = "(none)"} }

但是,VS8.0编译器出现错误错误C2143:语法错误:在''之前缺少'}'。当我编译C ++项目时。

我尝试了几种方法,但是,我只找到了将char *转换为uint64_t(分配给第一种类型)的方式,

(uint64_t)("none")

我可以使用联盟。这种方法安全吗?我使用VS调试工具检查了这个和其他struct-union对象的结构。似乎可以正确地解析struct和union的成员。

2 个答案:

答案 0 :(得分:1)

您只能使用该语法初始化union的第一个元素。 你需要另一种方法。

答案 1 :(得分:0)

struct构造函数,然后进行初始化 那里。当然,这不是静态初始化,而是如果 在进入main之前不会使用struct,这不应该是。{ 一个问题。

如果您确实需要静态初始化,请替换union 使用struct。这会增加对象的大小, 但如果只是用它,这不应该是一个大问题 一些静态初始化的对象。