2013-04-09 34 views
5

Tôi muốn sử dụng #define NOMINMAX trong dự án Visual Studio C++ của mình bằng MFC, để tôi có thể sử dụng std::minstd::max. Tuy nhiên, khi tôi đặt dòng này trong stdafx.h của tôi, tôi nhận được lỗi biên dịch sau:NOMINMAX với dự án Visual Studio 2012 MFC

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

Tôi không sử dụng GDI + cố ý, đây là điều mà MFC phải làm. Vấn đề có thể được khắc phục bằng cách nào đó, hoặc bằng cách loại bỏ GDI +, hoặc bằng cách điều chỉnh nó để biên dịch?

+0

Có vẻ là một câu hỏi tương tự với một câu trả lời nhắc đến một cách giải quyết, tuy nhiên tôi không hiểu các bước mô tả cách giải quyết: http://stackoverflow.com/a/4914108/16673 – Suma

Trả lời

8

Tôi không làm việc trên Windows vì vậy tôi không được sử dụng để đối phó với điều này, và tôi không thử nghiệm này, nhưng tôi tin rằng câu trả lời đó là gợi ý bạn làm điều này:

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

chí này có được các phiên bản "thích hợp" của minmax và cung cấp chúng sẵn có mà không cần tiền tố std:: (có vẻ như nó được sử dụng như thế nào trong tiêu đề GdiplusTypes.h).

+0

Điều này loại bỏ lỗi biên dịch, tuy nhiên nó mang min và max vào phạm vi toàn cầu, mà câu trả lời được đề cập cụ thể là một điều xấu. Tuy nhiên, nó đã giúp tôi hiểu được nó. Tôi đã chỉnh sửa mã để đạt được những gì đã được mô tả trong câu trả lời đó. – Suma

+0

@Suma Xem câu trả lời của tôi cho giải pháp _doesn't_ mang min và tối đa vào phạm vi toàn cầu. –

5

Các WINAPI minmax là macro, vì vậy bạn có thể chỉ #undef họ sau bao gồm MFC hoặc WINAPI tiêu đề:

#undef min 
#undef max 
+0

Và đừng '#define NOMINMAX'. – traal