2009-09-03 12 views
0

Dev-C++(バージョン4.9.9.2)とそれに付属の標準コンパイラを使って、誰かの古いC++プロジェクトを再構築しようとしています(MinGW )Windows XP Pro SP3 32ビットの下で。ファイルstrsafe.hの一つに含まれており、私がコンパイルしようとすると、私はこのエラーを取得しますstrsafe.hの '、'トークンの前に期待される一次式

expected primary-expression before ',' token 

コードの行のエラーポイントがstrsafe.hしているしていること(マイクロソフト()ライブラリ?ヘッダーファイル)は、次のようになります。

これらの各行に2つの「期待される一次式」エラーがあります。私はthis forum threadを見つけました。これは、NULL値が正しく認識されておらず、strsafe.hの前に<cstddef>を含めることを示唆しています。私はそれをし、それは動作しません。また、NULLが実際に定義されているように見えます。なぜなら、strsafe.hをインクルードする前に '#define NULL 0'を実行すると、そこに定義し直すというエラーが表示されるからです。

ご迷惑をおかけしますが、詳細を提供することはできませんが、このエラーを再現するコードは単に '#include <strsafe.h>'なので、他に何を言いたいのか分かりません。誰に何が起こっているかもしれないと私はこれを修正することができますどのようなアイデアを持っていますか?

ありがとうございます!

(私はすでにので、私はstrsafe.hの最新バージョンを使用しているMicrosoftプラットフォームSDKの最新バージョンをダウンロードしようとしました)

+0

使用されているSDKのバージョンは何ですか(strsafe.hのフルパスは何ですか)。私のVista SDKのコピーにはStringGetsExWorkerA()の言及はありません。 –

+0

別のフォーラムでも同様の問題が発生しているようです:http://forums1.avsim.net/index.php?s = 6bf19a616003413c15cf25212fde2352&showtopic = 244719&pid = 1617949&st = 0&#entry1617949。フォーラムでは特にstrsafe.hとMinGWについて述べています。あなたはおそらく彼らが問題を解決するためにしたことを試すことができますか? – reuben

+0

ここからPSDK-x86バージョンをダウンロードしました。http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en#filelist(Windows®Server 2003 SP1 Platform SDK )。 strsafe.hへのパスは「C:¥Program Files¥Microsoft Platform SDK¥Include¥strsafe.h」です。 @Rueben: "ソリューション"は別の環境/コンパイラを使用するようですか?私はMSVC++を試してみましたが、プロジェクトには他の問題がありましたが、ここで尋ねていた問題はありません。 – Jordi

答えて

0

私はNULLのように定義されるのだろうか?たぶん0ではないかもしれませんが(誰かが0以外のものとしてNULLを定義した場合は本当に奇妙ですが)

次のように試してみてください。

#undef NULL 
#define NULL 0 
+0

Cでは、通常NULLは(void *)0として定義されますが、C++ではストレートな0になります。 –

+0

これは実際に働いた。 (今は別の問題がありますが、この問題はこれらの2行のコードを使用して解決されています) – Jordi

+0

@Tyler、CまたはC++ではNULLなどはありません。ほとんどのコンパイラでは、それを(void *)0または0として定義することができますが、NULLを何か他のものとして定義するヘッダ/ライブラリ/ thirdpartyコード/コンパイラを停止することは絶対にありません。 NULLは標準の一部ではないので、使用しないでください。 – Glen

0

私の最初の考えは、少なくとも1つの識別子がまだ宣言されていないことです。

  • は、この行に順番に各識別子の前処理出力と
  • を見つけて前処理された出力を生成するオプションのためのコンパイラのマニュアルを参照してください(と、それを生成する)、検索:

    次のことを試してみてくださいその宣言を見つけるために後方へ

識別子が宣言されていないか、そのうちの1つがオブジェクトではなく型として宣言されていることがあります。この機能は、内部1(それは#ifndef STRSAFE_LIB_IMPL .... #endifブロックに囲まれています)で、それはStringCbGetsExAまたはStringCbGetsExAのような関数に巻き付けているようにそれはそうstrsafe.hファイルを通じて探し

0

。代わりにそれらを使うべきではありませんか?

+0

それはほとんどすべての機能に起こりますが、私はその機能を呼び出すとは思えません。ライブラリをインクルードするだけで、コンパイルが失敗します。 – Jordi

0

あなたのインクルードパスにSDKヘッダーが混在している可能性があります。インクルードパスを確認してください。 gccの "-H"オプションは、何が起こっているのかを知るのに役立ちます。

+0

すみませんが、どうしたらいいかわかりません。私はDev-Cpp環境のコンパイルボタンを使用していますが、gccが呼び出される他のパラメータについてはわかりません。また、私は実際に出力をどうするべきか分からないでしょう。 – Jordi

+0

私はDev-Cppについて何も知らないので、 "how"を手助けすることはできません。しかし、情報を取得した場合、最悪の場合、それをあなたの質問に編集すると、ここの誰かが助けになるかもしれません。 –

関連する問題