错误C2059:语法错误:'}'将c源文件添加到项目中

时间:2013-03-31 20:50:00

标签: c++ c cocos2d-x

我正在为Windows Phone 8的visual studio express编写一个C ++应用程序。

我正在尝试使用flite,一个用c编写的文本到语音库,到目前为止我已经添加了它的源文件和标题,并且我已经设置了使用预编译标题的选项在所有个体上都没有c文件,但是源文件仍然没有编译,而是编译器抱怨(很多次):

 error C2059: syntax error : '.'
 error C2059: syntax error : '}'

它在flite源代码中抱怨这些代码的这些问题:

DEF_STATIC_CONST_VAL_STRING(ffeature_default_val,"0");

DEF_STATIC_CONST_VAL_STRING的定义为:

#define DEF_CONST_VAL_STRING(N,S) const cst_val N = {{.a={.type=CST_VAL_TYPE_STRING,.ref_count=-1,.v={.vval= (void *)S}}}}

在这里你可以看到“。”和编译器抱怨的“}”。我还没有修改过c源代码,它是为iOS和Android项目构建的,所以我假设我没有掌握如何在visual express中包含C文件。 另外,在Visual Express中,.c文件旁边的图标是“++”:/

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

此语法:

struct MyStruct someObject = {.foo = bar, .baz = quux};

称为指定的初始值设定项。它只在C99的C99方言中有效,它在C89和所有版本的C ++中都是无效的。 Microsoft Visual Studio的C编译器不符合C99,因此无法编译该代码。您必须将代码转换为使用C89或C ++,或使用支持C99的其他编译器。

答案 1 :(得分:2)

C ++不支持C99初始化样式(指定的初始值设定项),请参阅herehere。换句话说,{ .blah = 42 };在C ++中是非法的。

你可以做的是为这个库创建一个C包装器,该文件将用C编译,但这些函数可用于C ++代码。请注意,msvc编译器不支持C99。