私は、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
下コードブロックので
内で初期化することができます非アクティブにする必要があります。なぜコンパイラがエラーを生成していますか?
任意の入力は歓迎です!
あなたの期待に反する '_VS2008'は定義されていないためです。ちなみに、pre-C++ 11コンパイラをサポートしなければならない場合は、C++ 11のすべてのショートカットを二重実装して書くのはあまり意味がありません。コードを読みにくくするだけで、 2つの実装が同期しなくなります。 –
@MatteoItalia申し訳ありませんが、私はこれを明確にしませんでしたが、 '_VS2008'はプリプロセッサの定義で実際に定義しました。私はifdefsを使用するように頼まれました。このアプリケーションはほとんど使用されず、数年に1回しか更新されないため、ifdefsを使用するように求められました。私はちょうどこれをすばやく手に入れなければならなかったと思います。しかし、アドバイスをありがとう! –