【发布时间】:2013-01-22 10:16:41
【问题描述】:
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 的成员。
【问题讨论】:
-
我觉得
def.s前面的.应该去掉 -
C++ 没有指示符(
.def.s =表示法)。 C 支持,但仅从 C99 开始,微软不支持。 -
是的,你是对的。我尝试了几种方法,但是,我只找到了将char *转换为uint64_t的方法,我可以使用联合。这种方法安全吗?好像没问题。
-
严格来说,它并不安全,但我认为它应该适合实际使用。
标签: c++