错误 C2059:将 C 源文件添加到项目时出现语法错误 :'}'
error C2059: syntax error :'}' when adding c source files to project
我正在用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
相关文章:
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- C++语法头文件错误
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- system() 返回错误语法错误:"("意外
- C++图形初始化错误(语法或丢失文件缺陷?
- 获取0:1(1):错误:语法错误,尝试编译着色器时意外$end
- Visual Studio错误:语法错误:标识符