2013-04-09 14 views
5

Chcę użyć #define NOMINMAX w moim projekcie Visual Studio C++ przy użyciu MFC, dzięki czemu mogę używać std::min i std::max. Jednak, kiedy mogę umieścić ten wiersz w moim stdafx.h, otrzymuję następujący błąd kompilacji:NOMINMAX z projektem Visual Studio 2012 MFC

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

nie używam GDI + celowo, to jest coś MFC należy robić. Czy problem można rozwiązać w jakiś sposób, usuwając GDI + lub dostosowując go do kompilacji?

+0

Wydaje się, że podobne pytanie z odpowiedzią wspomnieć o obejście, jednak nie wiem zrozumieć kroki opisujące obejście: http://stackoverflow.com/a/4914108/16673 – Suma

Odpowiedz

8

I nie działają na Windows, więc nie jestem przyzwyczajony do czynienia z tym, a ja nie testuje, ale wierzę, że odpowiedź sugeruje to zrobić:

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

Ta wola uzyskać "właściwe" wersje min i max i udostępnić je bez prefiksu std:: (co wydaje się być używane w nagłówku GdiplusTypes.h).

+0

To usuwa błąd kompilacji, jednak wprowadza min i maksimum do zakresu globalnego, który odpowiedź konkretnie wspomina jako coś złego. Pomogło mi to jednak w zrozumieniu tego. Zmodyfikowałem kod, aby osiągnąć to, co opisano w tej odpowiedzi. – Suma

+0

@Suma Zobacz moją odpowiedź na rozwiązanie, które nie wprowadza wartości min i max do zakresu globalnego. –

5

winapi min i max są makra, więc można po prostu #undef im po tym MFC lub WinAPI nagłówki:

#undef min 
#undef max 
+0

I nie "#define NOMINMAX". – traal

Powiązane problemy