我正在使用visual studio 2013編譯的C++程序,但需要使用visual studio 2008進行編譯,無論是在發佈模式下。我正在使用#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 ::號碼」:只有靜態常量積分數據 成員可以一類
由於#else
下的代碼塊中被初始化(在這種情況下int number = -1
)似乎是並且應該是不活動的,爲什麼編譯器會產生關於它們的錯誤?
任何輸入讚賞!
因爲'_VS2008',與您的期望相反,沒有定義。順便說一句,如果你必須支持一個C++ 11之前的編譯器,那麼編寫每個C++ 11快捷方式的雙重實現就沒什麼意義了 - 你只是讓代碼更難閱讀和冒險去擁有兩個實現不同步。 –
@MatteoItalia對不起,我沒有澄清這一點,但'_VS2008'我實際上在預處理器定義中定義它。我被要求使用ifdefs,我相信這是因爲這個應用程序很少被使用,它每隔幾年才更新一次。我想我只能快速解決這個問題。感謝您的建議,但! –