错误 C2059:将 C 源文件添加到项目时出现语法错误 :'}'

error C2059: syntax error :'}' when adding c source files to project

本文关键字:错误 语法 项目 C2059 源文件 添加      更新时间:2023-10-16

我正在用visual studio express为windows phone 8编写一个c++应用程序。

我试图使用flite,一个用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}}}}

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

语法:

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

称为指定初始化式。它只在C语言的C99方言中有效——在C89和所有版本的c++中无效。Microsoft Visual Studio的C编译器不兼容c99,因此它将无法编译该代码。您必须将代码转换为使用C89或c++,或者使用支持C99的其他编译器。

C99初始化风格(指定初始化器)在c++中不支持,参见这里或这里。换句话说,{ .blah = 42 };在c++中是非法的。

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