2

我正在 Visual Studio Express 中为 Windows Phone 8 编写 C++ 应用程序。

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

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

任何帮助是极大的赞赏。

4

2 回答 2

6

这个语法:

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

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

于 2013-03-31T20:54:04.777 回答
2

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

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

于 2013-03-31T20:52:26.623 回答