2

Windows Phone 8 の Visual Studio Express で C++ アプリケーションを作成しています。

c で記述されたテキスト読み上げライブラリである flite を使用しようとしています。これまでのところ、そのソース ファイルとヘッダーを追加し、プリコンパイル済みヘッダーを使用するオプションをすべての個々の 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

C99 初期化スタイル (指定された初期化子) は C++ ではサポートされていません。こちらまたはこちらを参照してください。つまり、{ .blah = 42 };C++ では違法です。

できることは、このライブラリの C ラッパーを作成することです。ファイルは C でコンパイルされますが、関数は C++ コードで使用できます。msvc コンパイラは C99 をサポートしていないことに注意してください。

于 2013-03-31T20:52:26.623 に答える