Así que estaba tratando de obtener una entrada entera válida de cin, y usé una respuesta a este question.¿Cómo trato con la macro máxima en windows.h que colisiona con max in std?
Se recomienda:
#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);
}
Lo que me da un error en Windows, diciendo que el max
macro no toma que muchos argumentos. Lo que significa que tengo que hacer esto
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);
Para que funcione. Eso es bastante feo; ¿Hay una mejor manera de solucionar este problema? Tal vez debería almacenar la definición de max
y redefinirla después?
¿Se incluye? ¿Por qué? Si realmente lo necesita, puede evitar definir macros _min_ y _max_ definiendo ** NOMINMAX ** antes de incluirlo. –
¿Está utilizando "namespace std"? Si es así, estás combinando deliberadamente espacios de nombres. –
@PaulBeckingham: las macros no tienen espacios de nombres y, por lo tanto, incluir windows.h sin ninguna precaución siempre colisionará con 'std :: min' /' std :: max' – PlasmaHH