10

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 将该:表单列为 obsolete,但它似乎并未被弃用或删除。在 C99 中,我当然会使用标准.<name> =形式,但对于 C++,这:是我所知道的用于指定初始化的唯一选项。

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

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

4

2 回答 2

2

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

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

MyStruct s;
s.a(1).b(2);
于 2013-01-14T19:35:10.303 回答
1

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

MyStruct s = {
 1,
 2,
}

这需要程序员保证初始化的顺序。

于 2015-04-29T02:29:17.160 回答