Macro kollidiert mit STL



  • Hallo, ich habe versucht folgenden Code unter Visual C++ zu kompilieren:

    #include <limits>
    #include <cstdlib>
    #include <windows.h>
    
    int main()
    {
    	if( std::numeric_limits<unsigned long>::max() == RAND_MAX )
    		;
    }
    

    Als Fehler erhalte ich:

    (7) : warning C4003: Nicht genügend übergebene Parameter für das Makro 'max'
    (7) : error C2589: '(': Ungültiges Token auf der rechten Seite von '::'
    (7) : error C2059: Syntaxfehler: '::'
    

    Der Fehler tritt nur auf, wenn windows.h inkludiert wird, da sich in windows.h (genauer windef.h, die von windows.h inkludiert wird) ein macro namens max befindet.

    #ifndef max
    #define max(a,b)            (((a) > (b)) ? (a) : (b))
    #endif
    

    Kann ich irgendwie die static funktion max aus <limits> benutzen und TROTZDEM windows.h in meinem Projekt verwenden?



  • #undef max



  • NOMINMAX



  • Vielen Danke! Funktioniert!


Log in to reply