C++ 错误C2059:语法错误:';}';将c源文件添加到项目时

C++ 错误C2059:语法错误:';}';将c源文件添加到项目时,c++,c,cocos2d-x,C++,C,Cocos2d X,我在VisualStudioExpress中编写了一个C++应用程序,用于Windows Phone 8。< /P> 我正在尝试使用flite,一个用c编写的文本到语音库,到目前为止,我已经添加了它的源文件和头文件,并且我已经在所有单独的c文件上将使用预编译头文件的选项设置为“否”,但是源文件仍然没有编译,而编译器抱怨(很多次): 它在flite源代码中抱怨此代码存在以下问题: DEF_STATIC_CONST_VAL_STRING(ffeature_default_val,"0"); 定义静

我在VisualStudioExpress中编写了一个C++应用程序,用于Windows Phone 8。< /P> 我正在尝试使用flite,一个用c编写的文本到语音库,到目前为止,我已经添加了它的源文件和头文件,并且我已经在所有单独的c文件上将使用预编译头文件的选项设置为“否”,但是源文件仍然没有编译,而编译器抱怨(很多次):

它在flite源代码中抱怨此代码存在以下问题:

DEF_STATIC_CONST_VAL_STRING(ffeature_default_val,"0");
定义静态常量值字符串的定义为:

#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文件旁边的图标为“++”:/

<> >非常感谢。在C++中,

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

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

此语法:

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

被称为指定的初始值设定项。它只在C99的C语言中有效,在C89和所有C++版本中都是无效的。Microsoft Visual Studio的C编译器不兼容C99,因此无法编译该代码。您必须转换代码以使用C++或C++,或者使用支持c99的不同编译器。< /p> C++不支持C99结构初始化语法。
struct MyStruct someObject = {.foo = bar, .baz = quux};