6

我想#define NOMINMAX在我的 Visual Studio C++ 项目中使用 MFC,这样我就可以使用std::minstd::max. 但是,当我将此行放入 stdafx.h 时,出现以下编译错误:

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

我不是故意使用 GDI+,这是 MFC 必须要做的事情。是否可以通过删除 GDI+ 或通过对其进行调整以进行编译来以某种方式解决此问题?

4

2 回答 2

11

我不在 Windows 上工作,所以我不习惯处理这个问题,我也没有测试这个,但我相信答案是建议你这样做:

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

min这将获得and的“正确”版本max,并使它们在没有std::前缀的情况下可用(这似乎是它在GdiplusTypes.h标题中的使用方式)。

于 2013-04-09T11:25:43.180 回答
5

winapiminmax是宏,因此您可以#undef在包含 MFC 或 winapi 标头后仅使用它们:

#undef min
#undef max
于 2013-04-09T11:26:12.867 回答