忽略GCC“错误:围绕标量初始值设定项的类型”错误。让他们警告

时间:2014-03-14 21:19:56

标签: c++ gcc compiler-construction compiler-errors braces

我对GCC编译器错误有一个棘手的问题“错误:在类型的标量初始化器周围括号”。我看到其他人抱怨这个,虽然他们把它描述为警告(gcc warning: braces around scalar initializer

我正在编译不能编辑的代码,并且在整个代码中我收到了很多这些错误。

基本模式是:

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”,或者将这些错误至少显示为警告的内容。

由于

1 个答案:

答案 0 :(得分:1)

我不是百分百肯定,但我相信没有这样的选择。在两种情况下,你所拥有的构造并不意味着相同的东西 - 第一种是初始化一种结构,第二种是包含结构或数组的结构。当然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;
}

编辑: 如果根本不可能编辑源代码,则需要解析源代码,识别错误的大括号并输出“正确”的代码。我越是想到这一点,我越不相信没有对源进行某种编辑就可以修复它。或者它曾经编译过......