1
 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 编译器给出了一个错误 error C2143: syntax error : missing '}' before '.' 当我编译 C++ 项目时。

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

(uint64_t)("none")

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

4

2 回答 2

1

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

于 2013-01-22T10:35:28.013 回答
0

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

如果您确实需要静态初始化,请将 替换unionstruct. 这会增加对象的大小,但如果它仅用于少数具有静态初始化的对象,这应该不是什么大问题。

于 2013-01-22T10:33:29.427 回答