如何在构造结构中初始化联合
How can I initialize the union in const struct?
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
,那不应该是一个问题。
如果需要静态初始化,请替换union
用struct
。这将增加对象的大小,但这应该不是一个大问题,如果它只用于几个静态初始化的对象
相关文章:
- 在C和C++中初始化结构中的数组
- 我们可以用参数化构造函数初始化结构的数组吗?
- 尝试初始化结构内的联合时出错
- 使用其他成员初始化结构的成员?
- 使用构造函数初始化结构还是在之后设置其值更好?
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 如何在另一个结构中初始化结构数组?
- 如何在构造函数中初始化结构体的动态数组?
- 初始化结构中的联合 - c++
- 尝试初始化结构向量时出现编译错误
- 用于初始化结构的 void 指针强制转换
- 初始化结构的两种方式
- 使用用户定义的构造函数初始化C++结构
- 使用初始值设定项列表初始化结构,对于 std::array 失败
- 在 c++ 中初始化结构的指针
- 无序列图会创建一个零初始化结构吗?
- 如何在C++中初始化结构
- C 用结构指针初始化结构
- 在C 中初始化结构数组
- 使用数组聚合初始化结构数组