NOMINMAX与Visual Studio 2012 MFC项目

NOMINMAX与Visual Studio 2012 MFC项目

问题描述:

我想在使用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://*.com/a/4914108/16673 – Suma 2013-04-09 11:16:32

我没有在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

的WINAPI minmax是宏,所以你可以#undef他们包括MFC或WINAPI头后:

#undef min 
#undef max 
+0

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