如何处理 windows.h 中的 max 宏与 std 中的 max 冲突?

新手上路,请多包涵

所以我试图从 cin 获取有效的整数输入,并使用了这个 问题 的答案。

它建议:

 #include <Windows.h> // includes WinDef.h which defines min() max()
#include <iostream>
using std::cin;
using std::cout;

void Foo()
{
    int delay = 0;
    do
    {
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        cout << "Enter number of seconds between submissions: ";
    } while(!(cin >> delay) || delay == 0);
}

这在 Windows 上给了我一个错误,说 max 宏没有那么多参数。这意味着我必须这样做

do
{
    if(cin.fail())
    {
        cin.clear();
#undef max
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);

让它工作。这很丑陋;有没有更好的方法来解决这个问题?也许我应该存储 max 的定义,然后重新定义它?

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

阅读 1k
2 个回答

定义宏 NOMINMAX

这将抑制 Windef.h 中的最小和最大定义。

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

只需将函数名称括在括号中:

 (std::numeric_limits<size_type>::max)()

在这种情况下不需要 NOMINMAX 宏,而且您不会收到编译器警告

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

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