【问题标题】:NOMINMAX with Visual Studio 2012 MFC project [duplicate]NOMINMAX 与 Visual Studio 2012 MFC 项目 [重复]
【发布时间】:2013-03-31 18:59:11
【问题描述】:

我想在使用 MFC 的 Visual Studio C++ 项目中使用 #define NOMINMAX,以便可以使用 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+ 或调整它以进行编译以某种方式解决此问题?

【问题讨论】:

标签: c++ visual-studio visual-studio-2012 mfc


【解决方案1】:

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

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

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

【讨论】:

  • 这消除了编译错误,但是它将最小值和最大值带入了全局范围,答案特别提到这是一件坏事。但是,它帮助我理解了它。我已经编辑了代码以实现该答案中描述的内容。
  • @Suma 查看我的答案,了解将最小值和最大值带入全局范围的解决方案。
【解决方案2】:

winapi minmax 是宏,因此您可以在包含 MFC 或 winapi 标头后只需 #undef 它们:

#undef min
#undef max

【讨论】:

  • 不要#define NOMINMAX
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多