0

我正在使用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)似乎是並且應該是不活動的,爲什麼編譯器會產生關於它們的錯誤?

任何輸入讚賞!

+0

因爲'_VS2008',與您的期望相反,沒有定義。順便說一句,如果你必須支持一個C++ 11之前的編譯器,那麼編寫每個C++ 11快捷方式的雙重實現就沒什麼意義了 - 你只是讓代碼更難閱讀和冒險去擁有兩個實現不同步。 –

+0

@MatteoItalia對不起,我沒有澄清這一點,但'_VS2008'我實際上在預處理器定義中定義它。我被要求使用ifdefs,我相信這是因爲這個應用程序很少被使用,它每隔幾年才更新一次。我想我只能快速解決這個問題。感謝您的建議,但! –

回答

0

找到了解決方案。代碼塊位於DLL項目中,主項目包含一些導出的頭文件。我不知道我必須在主項目中定義_VS2008

1

您應該使用_MSC_VER宏來檢測的Visual Studio版本:

#if (_MSC_VER == 1500) 

1500在這裏是指VS2008。版本列表是here

+0

感謝您的信息。我其實也發現了這篇文章,但我仍然收到錯誤。我將用我收到的錯誤更新我的問題。 –

相關問題