#define NOMINMAX 使用 std::min/max

新手上路,请多包涵

我最近补充说:

 #define NOMINMAX
#include <Windows.h>
#include <algorithm>

到我的 main.cpp 以便使用

std::max( x , x ); // x is just a placeholder and not actual anything
std::min( x  , x );

但我不能在其他文件中使用 std::max()/std::min()

 error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'

我试图在我的其他文件中添加 #define NOMINMAX ,但失败了。线索是什么?

在问之前我环顾四周,但我不明白答案 在 Visual C++ 上 NOMINMAX 可能存在的问题

原文由 NaturalDemon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

如果您真的很绝望,请在函数名称周围加上括号:

 (std::min)(x, y);

此语法不会应用类似函数的宏。 (正式地,要应用类似函数的宏,宏的名称必须后跟可选的空格,然后是’(’。)

原文由 Pete Becker 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您定义 NOMINMAX,因为您更喜欢 STL 版本,那么在包含使用 min/max 宏的 gdiplus.h 时可能会遇到问题。作为解决方案,您需要在包含 gdiplus.h 之前 包含 STL 标头并使用“使用命名空间 std”。

例如:

 #define NOMINMAX

// Include C++ headers
#include <algorithm>
using namespace std;

// Include Windows headers
#include <windows.h>
#include <gdiplus.h>

原文由 David Gausmann 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题