在Eclipse中无法识别C ++ GNU指定的结构初始化

时间:2013-01-14 19:22:22

标签: c++ eclipse gcc eclipse-cdt

CDT解析器报告结构初始化的语法错误:

typedef struct MyStruct
{
    int a;
    float b;
};

int main( void )
{
    // GNU C extension format
    MyStruct s = {a : 1, b : 2};
    // C99 standard format
//    MyStruct s = {.a = 1, .b = 2};

    return 0;
}

虽然GCC lists the : form as obsolete,但它似乎尚未被弃用或删除。在C99中,我当然会使用标准的.<name> =形式,但对于C ++,:是我知道指定初始化的唯一选项。

我已经尝试将我的工具链设置为MinGW和Cross GCC,但似乎都不起作用。

如何让Eclipse识别这种语法?这对于一行来说并不是什么大不了的事情,但它会传递给变量的每个其他实例,因为Eclipse没有意识到它被声明了。

2 个答案:

答案 0 :(得分:2)

.表单仅在C99中可用,而不是在任何C ++中。在C ++中,您唯一符合标准的选项是有序初始化或构造函数。

可以使用链接和适当的引用返回方法来创建类似的接口(这里a和b是方法而不是变量):

MyStruct s;
s.a(1).b(2);

答案 1 :(得分:1)

我也遇到了这个问题,我用下面的方法来解决它。

MyStruct s = {
 1,
 2,
}

这要求程序员确保初始化顺序。

相关问题