Wie gehe ich mit dem Max-Makro in windows.h mit max in std kollidieren?

So, ich habe versucht, gültige integer-Eingabe von cin, und verwendet eine Antwort auf diese Frage.

Empfohlen:

#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);
}

Gibt mir eine Fehlermeldung unter Windows, die sagen, dass die max makro nicht, dass viele Argumente. Das bedeutet, ich habe zu tun, diese

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);

Um es an die Arbeit. Das ist ziemlich hässlich; gibt es einen besseren Weg, um dieses Problem zu umgehen? Vielleicht sollte ich die Speicherung der definition von max und neu zu definieren es danach?

Kommentar zu dem Problem - Öffnen
Tun Sie include <windows.h> ? Warum? Wenn Sie es wirklich benötigen können Sie vermeiden, definieren von min und max Makros durch die Definition von NOMINMAX vor. Kommentarautor: Piotr Tkaczyk
Sind Sie mit namespace "std"? Wenn ja, sind Sie bewusst auf die Kombination von namespaces. Kommentarautor: Paul Beckingham
@PaulBeckingham: Makros haben keine namespaces, und demzufolge auch windows.h ohne Vorsichtsmaßnahmen werden immer kollidieren mit std::min/std::max Kommentarautor: PlasmaHH
mögliche Duplikate von Seltsame C++ Fehler mit code, min()/max () - Aufrufe Kommentarautor: PlasmaHH

InformationsquelleAutor der Frage Almo | 2012-07-18

Schreibe einen Kommentar