2013-04-09 4 views
5

के साथ NOMINMAX मैं एमएफसी का उपयोग कर अपने विजुअल स्टूडियो सी ++ प्रोजेक्ट में #define NOMINMAX का उपयोग करना चाहता हूं, ताकि मैं std::min और std::max का उपयोग कर सकूं। हालांकि, जब मैं अपने stdafx.h में इस लाइन में कहें, मैं संकलन त्रुटि निम्नलिखित हो:विजुअल स्टूडियो 2012 एमएफसी प्रोजेक्ट

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

मैं GDI उपयोग नहीं कर रहा + जानबूझकर, यह कुछ MFC कर किया जाना चाहिए। क्या समस्या किसी भी तरह से तय की जा सकती है, या तो जीडीआई + को हटाकर, या इसे संकलित करने के लिए समायोजित करके?

+0

वहाँ एक जवाब एक समाधान के उल्लेख के साथ एक समान प्रश्न प्रतीत हो रहा है, फिर भी मैं नहीं वर्कअराउंड का वर्णन करने वाले चरणों को समझें: http://stackoverflow.com/a/4914108/16673 – Suma

उत्तर

8

मैं विंडोज पर काम नहीं करते तो मैं इस के साथ काम करने के लिए इस्तेमाल नहीं कर रहा हूँ, और मैं इस परीक्षण नहीं कर रहा हूँ, लेकिन मुझे विश्वास है कि इस सवाल का जवाब आप ऐसा करते हैं सुझाव है:

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

हो जाएगा ताकि min और max के "उचित" संस्करण प्राप्त करें, और उन्हें std:: उपसर्ग के बिना उपलब्ध कराएं (ऐसा लगता है कि यह GdiplusTypes.h शीर्षलेख में कैसे उपयोग किया जाता है)।

+0

यह संकलन त्रुटि को हटा देता है, हालांकि यह वैश्विक दायरे में न्यूनतम और अधिकतम लाता है, जिसका उत्तर विशेष रूप से बुरी चीज के रूप में उल्लेख करता है। हालांकि, इससे मुझे इसकी समझ बनाने में मदद मिली। मैंने उस उत्तर में वर्णित किए गए कार्यों को प्राप्त करने के लिए कोड संपादित किया है। – Suma

+0

@ सुमा एक समाधान के लिए मेरा उत्तर देखें जो _doesn't_ वैश्विक दायरे में न्यूनतम और अधिकतम लाता है। –

5

WinAPI min और max मैक्रो नहीं है, तो आप सिर्फ #undef उन्हें MFC या WinAPI हेडर के बाद कर सकते हैं:

#undef min 
#undef max 
+0

और 'NOMINMAX को परिभाषित न करें '। – traal

संबंधित मुद्दे