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没有意识到它被声明了。
答案 0 :(得分:2)
.
表单仅在C99中可用,而不是在任何C ++中。在C ++中,您唯一符合标准的选项是有序初始化或构造函数。
你可以使用链接和适当的引用返回方法来创建类似的接口(这里a和b是方法而不是变量):
MyStruct s;
s.a(1).b(2);
答案 1 :(得分:1)
我也遇到了这个问题,我用下面的方法来解决它。
MyStruct s = {
1,
2,
}
这要求程序员确保初始化顺序。