2008-08-18 6 views
6

मुझे अजीब त्रुटियां दिखाई दे रही हैं जब मेरे सी ++ कोड में न्यूनतम() या अधिकतम() कॉल है। मैं विजुअल सी ++ कंपाइलर्स का उपयोग कर रहा हूं।कोड के साथ अजीब सी ++ त्रुटियां जिनमें न्यूनतम()/अधिकतम() कॉल

+4

यह आधिकारिक तौर पर स्टैक ओवरफ़्लो पर oddest सवाल – eplawless

उत्तर

17

चेक अपने कोड windows.h हेडर फाइल और या तो अपने कोड या अन्य तीसरे पक्ष के हेडर के साथ है, तो अपने स्वयं के मिनट()/अधिकतम() परिभाषाएं हैं। यदि हाँ, तो इस तरह NOMINMAX की एक परिभाषा के साथ अपने windows.h शामिल किए जाने के पहले जोड़ें:

#define NOMINMAX 
#include <windows.h> 
1

ओह ... गुंजाइश यह, दोस्त: std::min(), std::max()

+5

तुम अब भी या पूर्वप्रक्रमक अभी भी मिनट और अधिकतम विस्तार होगा NOMINMAX #define की जरूरत है। – Ferruccio

0

मैंने इसे वर्षों में उपयोग नहीं किया है, लेकिन मेमोरी बूस्ट से न्यूनतम और अधिकतम भी संभवतः असाइन किया जाता है?

2

एक और संभावना साइड इफेक्ट्स से हो सकती है। अधिकांश न्यूनतम/अधिकतम मैक्रोज़ में पैरामीटर कई बार शामिल होंगे और जो भी आप उम्मीद करते हैं वह नहीं कर सकते हैं। त्रुटियां और चेतावनियां भी उत्पन्न की जा सकती हैं।

 
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

afterwards i is either plus 1 or plus 2

() विस्तार में समस्याओं से बचने के अगर आप इसे सूत्रों के साथ कहते हैं। अधिकतम (ए, बी + स)

0

ईमानदारी का विस्तार करके देखें जब यह न्यूनतम करने के लिए आता है/अधिकतम, मैं यह सबसे अच्छा लगता है बस परिभाषित करने के लिए अपने ही:

#define min(a,b) ((a) < (b) ? (a) : (b)) 
#define max(a,b) ((a) >= (b) ? (a) : (b)) 
+4

कौन सा, स्पष्ट रूप से, मुसीबत के लिए पूछ रहा है। सी ++ में, std :: swap' का उपयोग कर का उपयोग 'और अपने खुद के स्वैप बारे में जब आप डिफ़ॉल्ट से बेहतर कर सकते। सी में, बहुत पट्टे पर लिखने '#define मिनट (ए, बी) ((क) <(ख) (क): (ख))' और यह सुनिश्चित करें आप कुछ भी से कॉल करने की नहीं है दुष्प्रभावों के साथ बनाने, क्योंकि आपके पास एकाधिक मूल्यांकन होंगे। –

2

के बाद से विंडोज एक समारोह शैली के रूप में इस को परिभाषित करता है मैक्रो, निम्नलिखित वैकल्पिक हल उपलब्ध है:

int i = std::min<int>(3,5); 

यह काम करता है क्योंकि मैक्रो min() केवल विस्तृत किया जाता है min( द्वारा पीछा किया जाता है, और नहीं है जब यह < द्वारा पीछा किया है।

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