1. ホーム
  2. c++

windows.h の max マクロが std の max と衝突するのをどうすればよいですか?

2023-09-07 01:39:01

質問

そこで、私は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 の定義を保存して、後でそれを再定義するべきでしょうか?

どのように解決するのですか?

マクロを定義する NOMINMAX :

これは Windef.h の min と max の定義を抑制するものです。