2013-04-09 205 views
5

我想在使用MFC的Visual Studio C++項目中使用#define NOMINMAX,以便我可以使用std::minstd::max。然而,當我把這個線在我的stdafx.h中,我獲得以下編譯錯誤:NOMINMAX與Visual Studio 2012 MFC項目

c:\program files (x86)\windows kits\8.0\include\um\GdiplusTypes.h(475): error C3861: 'min': identifier not found

我不使用GDI +故意的,這是後話MFC必須做。問題是否可以通過刪除GDI +或通過調整它來編譯?

+0

似乎有一個答案提一個解決方法類似的問題,但我不知道請了解描述解決方法的步驟:http://stackoverflow.com/a/4914108/16673 – Suma 2013-04-09 11:16:32

回答

8

我沒有在Windows上工作,所以我不是用來處理這一點,我沒有測試這個,但我認爲這個問題的答案是建議你這樣做:

#define NOMINMAX 
#include <algorithm> 
namespace Gdiplus 
{ 
    using std::min; 
    using std::max; 
}; 
//... your other includes. 

這將得到minmax的「正確」版本,並使它們在沒有std::前綴的情況下可用(這似乎是它在GdiplusTypes.h標頭中的使用方式)。

+0

這會消除編譯錯誤,但它會將最小值和最大值納入到全局範圍中,答案明確提到這是一件壞事。但是,它幫助我瞭解它。我編輯了代碼以實現該答案中描述的內容。 – Suma 2013-04-09 11:37:43

+0

@Suma查看我的答案,提供了一個解決方案,不會將min和max帶入全球範圍。 – 2013-04-10 16:59:39

5

的WINAPI minmax是宏,所以你可以#undef他們包括MFC或WINAPI頭後:

#undef min 
#undef max 
+0

並且不要'#define NOMINMAX'。 – traal 2013-12-18 18:34:37