【发布时间】:2011-09-09 05:15:24
【问题描述】:
我目前正在使用旧版 C++ 代码,使用 gcc 2.9.X 成功编译。
我被要求将此遗留代码移植到 gcc 3.4.X。大多数错误都很容易纠正,但这个特殊的错误让我感到困惑。
上下文:
struct TMessage
{
THeader header;
TData data;
};
struct THeader
{
TEnum myEnum;
TBool validity;
};
做了什么:
const TMessage init = {{0}};
/* Later in the code ... */
TMessage message = init;
我的问题:
{{}} 运算符的含义是什么?它是否将第一个字段(header)初始化为二进制 0 ?它是否将第一个结构(enum)的第一个字段初始化为(字面量)0?
我得到的 3.4.6 错误是 invalid conversion from 'int' to 'TEnum',带有一对或两对花括号。
如何在不使用 memset 的情况下将我的结构设置为一堆 0?
提前致谢。
【问题讨论】:
-
为什么要将代码从旧版本的 gcc 移植到另一个旧版本的 gcc?
-
在另一个平台上编译/链接/执行它。
-
不了解 C++。在 C 语言中没有错误(也许你的编译器过于有帮助到了错误的地步)
-
而且你真的不应该尝试编写多语言源文件。这比它的价值要付出更多的努力。选择一种语言(C 或 C++ ...或 D 或 Eiffel 或 Forth 或 ...)并坚持下去。
-
正如我所说,这是遗留代码,我无权更改任何内容,除非在 3.4.6 中无法编译。否则我会同意你的看法;)