मैं एक बहुत बड़ी परियोजना पर काम कर रहा हूं और एक फ़ाइल में हम सभी को अचानक संकलन-समय त्रुटि मिली जहां संकलक को लगता है कि winsock.h पर हमारा कॉल bind()
वास्तव में std::bind()
पर कॉल है। ऐसा लगता है कि फ़ाइल में शामिल कहीं भी using namespace std
कोड स्निपेट है। हम कोशिश कर सकते हैं और यह पता लगा सकते हैं कि इन using namespace std
उपयोग में हैं और उन्हें हटा दें, लेकिन शायद ऐसा करने का एक बेहतर तरीका है?std :: bind और winsock.h बाइंड भ्रम
उत्तर
वैश्विक नामस्थान निर्दिष्ट करने के लिए आप ::bind()
का उपयोग करने के लिए अपनी कॉल बदल सकते हैं।
हां, यह दुर्भाग्यपूर्ण है। मैं http://gcc.gnu.org/ml/libstdc++/2011-03/msg00143.html में वर्णित है std::bind
टेम्पलेट एक बेहतर मुकाबला नहीं है जब तक आप बिल्कुल सही तर्क प्रकारों का उपयोग करें:
समस्या सॉकेट बाँध() फ़ंक्शन इस हस्ताक्षर किया है:
int bind(int, const sockaddr*, socklen_t);
तो में कॉल गैर-कॉन्स्ट पॉइंटर का उपयोग करने वाला उदाहरण पाता है कि विविधता टेम्पलेट std :: बाइंड एक बेहतर मिलान है। ऐसा ही होगा यदि तीसरा तर्क socklen_t को छोड़कर कोई अभिन्न प्रकार था।
आपका कोड जीसीसी के साथ काम करेगा, क्योंकि मैं इस अस्पष्टता को रोकने के लिए जीसीसी के std::bind
करने के लिए एक अनुरूप एक्सटेंशन जोड़, अधिभार सेट से std::bind
को हटाने यदि पहला तर्क "सॉकेट की तरह", जो मैं is_integral
का उपयोग कर परिभाषित किया गया है द्वारा और is_enum
। हालांकि यह अन्य कार्यान्वयन के साथ मदद नहीं करता है।
using namespace std;
निकाला जा रहा है एक अच्छा विचार वैसे भी है, लेकिन bind()
को एक अयोग्य कॉल ऐसा होता है एक प्रकार नाम स्थान std
(जैसे std::size_t
के रूप में) में परिभाषित उपयोग करने के लिए है, क्योंकि अभी भी तर्क निर्भर देखने से std::bind
मिल सकता है पूरी तरह से पर्याप्त नहीं हो सकता है। जोनाथन पॉटर का जवाब आपको सही कार्य सुनिश्चित करने का सबसे अच्छा तरीका है: इसे ::bind
के रूप में योग्य बनाएं।
+ 1। –
- 1. सी ++ 11 std :: बाइंड और बूस्ट :: बाइंड
- 2. std :: बाइंड और ओवरलोडेड फ़ंक्शन
- 3. std :: bind
- 4. sys/sockets.h और std :: bind में बाइंड() के बीच अंतर कैसे करें?
- 5. std :: bind के साथ यह कैसे करें?
- 6. विविधता वाले टेम्पलेट्स के साथ std :: ref() और std :: bind() के बारे में थोड़ा आलसी
- 7. क्या std :: bind boost :: asio के साथ संगत होना चाहिए?
- 8. क्या जावास्क्रिप्ट या node.js में std :: bind के बराबर है?
- 9. कैसे std :: बाइंड का उपयोग किया जा सकता है?
- 10. बूस्ट :: बाइंड और क्लास सदस्य फ़ंक्शन
- 11. बाइंड()
- 12. क्या यह boost :: signals2 के साथ std :: bind का उपयोग सुरक्षित है?
- 13. बाय-रेफ तर्क: क्या यह std :: thread और std :: bind के बीच एक असंगतता है?
- 14. std :: bind और std :: thread हमेशा तर्कों की प्रतिलिपि बनाने के पीछे तर्क क्या है?
- 15. std :: map find_if condition style भ्रम
- 16. वी-मॉडल और वी-बाइंड
- 17. बूस्ट के साथ लैम्ब्डा फ़ंक्शंस का उपयोग कैसे करें :: bind/std :: VC++ 2010 में बाध्य करें?
- 18. मुझे std :: bind का उपयोग कब करना चाहिए?
- 19. कार्यशीलता के लिए std :: bind खाता क्यों नहीं है?
- 20. बाइंड परम
- 21. std :: बाँध और std :: समारोह सवाल
- 22. std ::ss और boost ::'s :: bind और :: फ़ंक्शन कारण समस्याओं को अंतःस्थापित कर सकता है?
- 23. सदस्य ऑपरेटर के लिए shared_ptr और सूचक के बारे में `-> *` और `std :: bind`
- 24. सॉकेट कनेक्ट() बनाम बाइंड()
- 25. बाइंड और jQuery .on()
- 26. 'कॉल/लागू' और 'बाइंड'
- 27. निन्टेक्ट + बाइंड जेनेरिक रिपोजिटरी
- 28. नेमस्पेस भ्रम
- 29. बाइंड बनाम SO_BINDTODEVICE सॉकेट
- 30. char ** और तर्क भ्रम
नामस्थान मजेदार हैं वे नहीं हैं? –
नहीं, बस इसे हटा दें। – inf
'नामस्थान std' का उपयोग करके निकालें, अन्यथा आपको किसी अन्य नाम के साथ भविष्य में कभी भी एक ही समस्या होगी। क्यों समझाए जाने के लिए – juanchopanza