2013-04-09 2 views
5

Desidero utilizzare #define NOMINMAX nel mio progetto Visual Studio C++ utilizzando MFC, in modo da poter utilizzare std::min e std::max. Tuttavia, quando ho messo questa linea nella mia stdafx.h, ottengo seguente errore di compilazione:NOMINMAX con progetto MFC di Visual Studio 2012

c:\program files (x86)\windows kits\8.0\include\um\GdiplusTypes.h(475): error C3861: 'min': identifier not found

non sto usando GDI + intenzionalmente, questa è una cosa MFC deve fare. Il problema può essere risolto in qualche modo, sia rimuovendo la GDI +, o regolando a compilare?

+0

Sembra che ci sia una domanda simile con una risposta citano una soluzione, ma non lo faccio capire i passi che descrivono la soluzione alternativa: http://stackoverflow.com/a/4914108/16673 – Suma

risposta

8

non lavoro su Windows, quindi non sono abituato a trattare con questo, e non sto testando questo, ma credo che la risposta sta suggerendo di fare questo:

#define NOMINMAX 
#include <algorithm> 
namespace Gdiplus 
{ 
    using std::min; 
    using std::max; 
}; 
//... your other includes. 

Questa volontà ottenere le versioni "propri" di min e max, e renderli disponibili senza il std:: prefisso (che sembra essere come viene utilizzato nell'intestazione GdiplusTypes.h).

+0

Questo rimuove l'errore di compilazione, tuttavia porta min e max in a portata globale, che la risposta cita espressamente come una cosa negativa. Tuttavia, mi ha aiutato a capirlo. Ho modificato il codice per ottenere ciò che è stato descritto in quella risposta. – Suma

+0

@Suma vedi la mia risposta per una soluzione che _doesn't_ portare min e max in ambito globale. –

5

Il WinAPI min e max sono le macro, in modo da poter semplicemente #undef loro dopo comprese le MFC o WinAPI intestazioni:

#undef min 
#undef max 
+0

E non 'NOMINMAX' #define. – traal