2013-03-31 121 views
1

我正在写在Visual Studio中的C++应用程序表达对Windows Phone的8错误C2059:语法错误:“}”添加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项目构建,因此我假设我没有掌握如何将C文件包含在视觉表达中。 在附注中,在Visual Express中,.c文件旁边的图标是“++”:/

任何帮助都非常感谢。

+2

C++不支持C99结构初始化程序的语法。 – PlasmaHH

回答

4

这句法:

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

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

2

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

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

相关问题