所以我试图从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);
}
这使我在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 **来避免定义_min_和_max_宏。 –
2012-07-18 14:50:38
你在使用“namespace std”吗?如果是这样,你故意组合命名空间。 – 2012-07-18 14:51:17
@PaulBeckingham:宏没有命名空间,因此包含windows.h没有任何预防措施将总是与'std :: min' /'std :: max'发生冲突 – PlasmaHH 2012-07-18 15:00:58