如何在构造结构中初始化联合

How can I initialize the union in const struct?

本文关键字:初始化 结构      更新时间:2023-10-16
 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;
} ;

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

创建一个常量结构体

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

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

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

(uint64_t)("none")

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

您只能使用该语法初始化联合的第一个元素。

struct一个构造函数,并进行初始化在那里。当然,这不是静态初始化,但是如果结构是不使用,直到你进入main,那不应该是一个问题。

如果需要静态初始化,请替换unionstruct。这将增加对象的大小,但这应该不是一个大问题,如果它只用于几个静态初始化的对象