2013-04-09 4 views
5

Я хочу использовать #define NOMINMAX в моей Visual Studio C++ проекте с использованием MFC, так что я могу использовать std::min и std::max. Однако, когда я ставлю эту строку в моей stdafx.h, я получаю следующее сообщение об ошибке компиляции:NOMINMAX с Visual Studio 2012 Проект MFC

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

Я не использую GDI + намеренно, это то, что MFC должен делать. Может ли проблема быть исправлена ​​каким-то образом, либо путем удаления GDI +, либо путем ее настройки для компиляции?

+0

Там, кажется, подобный вопрос с ответом, упоминая обходной путь, но я не понять шаги, описывающие обходной путь: http://stackoverflow.com/a/4914108/16673 – Suma

ответ

8

Я не работаю на Windows, так что я не привык иметь дело с этим, и я не испытывать это, но я считаю, что ответ предлагаю вам сделать это:

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

Это будет получите «правильные» версии min и max и сделайте их доступными без префикса std:: (что похоже на то, как он используется в заголовке GdiplusTypes.h).

+0

Это устраняет ошибку компиляции, но привносит min и max в глобальную область, которую ответ конкретно упоминает как плохую вещь. Однако это помогло мне разобраться в этом. Я редактировал код для достижения того, что было описано в этом ответе. – Suma

+0

@Suma См. Мой ответ для решения, которое _doesn't_ приносит min и max в глобальную область. –

5

WinAPI min и max макросы, так что вы можете просто #undef их после включения МФЦ или WinAPI заголовки:

#undef min 
#undef max 
+0

И не '#define NOMINMAX'. – traal

Смежные вопросы