2013-03-31 106 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。

相關問題