私はcinから有効な整数の入力を取得しようとしていましたが、この回答はquestionでした。windows.hのmaxマクロをstdのmaxと衝突させるにはどうすればいいですか?
それは推奨:
#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);
}
max
マクロは、多くの引数を取らないことを言って、私はWindows上でエラーを与えます。これは私がこれをしなければならないことを意味する
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 **を定義することで_min_と_max_マクロの定義を避けることができます。 –
"namespace std"を使用していますか?その場合、意図的に名前空間を結合しています。 –
@PaulBeckingham:マクロに名前空間がないため、注意を払わずにwindows.hを含めても常に 'std :: min' /' std :: max'と衝突します – PlasmaHH