0

私は、Visual Studio 2013でコンパイルされていて、リリースモードでVisual Studio 2008でコンパイルする必要があるC++プログラムを作成しています。私は#ifdefブロックを使用して、それ以前にサポートされていなかった機能/機能の代替案を追加しています。次のコードブロックは一例です:アクティブでない#ifdefブロックでのコンパイラエラー

struct someStruct 
{ 
#ifdef _VS2008 // defined in preprocessor definition 
    someStruct() 
    { 
     number = -1; 
    } 
    int number; 
#else 
    int number = -1; 
#endif 
    char* Text; 
}; 

と私はラインint number = -1上で、次のコンパイラエラーを取得しています。

エラーC2864:「someStruct ::番号」のように見えるだけ静的定数積分データ メンバー(この場合int number = -1に)クラス#else下コードブロックので

内で初期化することができます非アクティブにする必要があります。なぜコンパイラがエラーを生成していますか?

任意の入力は歓迎です!

+0

あなたの期待に反する '_VS2008'は定義されていないためです。ちなみに、pre-C++ 11コンパイラをサポートしなければならない場合は、C++ 11のすべてのショートカットを二重実装して書くのはあまり意味がありません。コードを読みにくくするだけで、 2つの実装が同期しなくなります。 –

+0

@MatteoItalia申し訳ありませんが、私はこれを明確にしませんでしたが、 '_VS2008'はプリプロセッサの定義で実際に定義しました。私はifdefsを使用するように頼まれました。このアプリケーションはほとんど使用されず、数年に1回しか更新されないため、ifdefsを使用するように求められました。私はちょうどこれをすばやく手に入れなければならなかったと思います。しかし、アドバイスをありがとう! –

答えて

0

この溶液が見出された。コードブロックはDLLプロジェクトにあり、メインプロジェクトにはエクスポートされたヘッダーがいくつか含まれています。私は、メインプロジェクトに_VS2008を定義しなければならないことを知らなかった。

1

あなたはマクロ_MSC_VERは、Visual Studioのバージョンを検出するために使用する必要があります。

#if (_MSC_VER == 1500) 
がここにVS2008を意味します。バージョンの一覧は hereです。

+0

情報ありがとうございます。私は実際にそのポストも見つけましたが、私はまだエラーが発生しています。私は私が得ているエラーで私の質問を更新します。 –

関連する問題