我有一个令人烦恼的问题,GCC 编译器错误“错误:类型标量初始值设定项周围的大括号”。我看到其他人对此抱怨,尽管他们将其描述为警告(gcc警告:标量初始值设定项周围的大括号)
我正在编译不属于我编辑的代码,并且在整个代码中出现很多此类错误。
基本模式是:
struct t_
{
float f;
int i;
};
float f = { 0.3 }; //Compiler is all happy with this.
int i = {0}; //Compiler is all happy with this too.
t_ t1 = { 0.3, 0 }; //Compiler is all happy with this too.
t_ t2 = { {0.3}, 0 }; //Compiler ERROR: braces around scalar initializer for type 'float'
我知道我可以删除浮动缩放器周围的大括号 {} 以消除此错误,但我不想以任何方式修改代码。我可以给 GCC 一个标志吗(目前使用 MinGW gcc 4.8.1)。即“std=c++03”,或者至少将这些错误显示为警告的东西。
我不是100%确定,但我相信没有这样的选择。在这两种情况下,您所拥有的构造的含义并不相同 - 第一个是一个结构的初始化,第二个是包含结构或数组的结构。
float
当然不是。
您也许可以通过
解决这个问题struct t_
{
struct
{
float f;
};
int i;
};
至少 clang 对此感到满意。 g++ 也是如此。这可能比更改大量带有额外大括号的初始化语句更容易。但不可否认的是,这仍然是对源代码的更改。不幸的是,我非常确定这是必要的。
我正在测试的完整示例:
struct t_
{
struct
{
float f;
};
int i;
};
t_ t2 = { {0.3}, 0 };
int main()
{
t2.f = 7;
}
编辑: 如果根本不可能编辑源代码,则需要解析源代码,识别不正确的大括号并输出“正确”代码。我对此思考得越多,就越不相信无需对源代码进行某种编辑就可以修复它。或者它曾经编译过......