मैं वर्तमान में थोड़ा प्रतिबंधित वातावरण में एक सी ++ एप्लिकेशन पोर्ट कर रहा हूं। एप्लिकेशन एसटीएल, स्ट्रिंग और स्ट्रीम कक्षाओं का उपयोग करता है। मैं इनके सरलीकृत संस्करणों को फिर से लिख रहा हूं जो मेरे पर्यावरण में अच्छी तरह से खेलेंगे।सी ++ ऑपरेटर परिभाषा के बिना विफल
मुझे इस बारे में चिंता है कि मेरा आवेदन सभी आवश्यक ऑपरेटर परिभाषाओं के बिना भी संकलित हो रहा है। उदाहरण के लिए, मेरी स्ट्रिंग कक्षाओं के लिए मैंने परिभाषित किया:
string operator+ (const string& lhs, const string& rhs);
और यह पर्याप्त था। हालांकि, मैंने देखा कि अक्सर ऐसे मामले थे जिनमें Mystring + "कुछ स्थिर स्ट्रिंग" थी और यह कहीं भी मेरे कोड में परिभाषित नहीं है। जब मैंने स्पष्ट रूप से इसे जोड़ा तो इसका उपयोग किया गया:
string operator+ (const string& lhs, const char* rhs);
इससे पहले क्या चल रहा था? इससे पहले कि मैंने दूसरा फ़ंक्शन जोड़ा, इसे सफलतापूर्वक संकलित किया गया। निश्चित रूप से संकलक यह समझने में सक्षम नहीं होगा कि मेरी स्ट्रिंग क्लास में सी-स्टाइल स्ट्रिंग को कैसे जोड़ा जाए।
मुझे अब मेरे कार्यक्रम में अजीब व्यवहार हो रहा है और मुझे आश्चर्य है कि यह अन्य ऑपरेटरों के कारण अनिर्धारित है। क्या प्रोग्राम द्वारा इसकी आवश्यकता होने पर ऐसी ऑपरेटर परिभाषाओं की आवश्यकता के लिए कंपाइलर को लागू करने का कोई तरीका है?
पीएस मेरी स्ट्रिंग क्लास एक अद्वितीय नामस्थान में है और std ::
क्या आपके पास एक निहित रूपांतरण या कन्स्ट्रक्टर है जो 'कॉन्स्ट char *' से आपकी 'स्ट्रिंग' कक्षा में परिवर्तित हो जाता है? –
हां, मेरी स्ट्रिंग क्लास में "कॉन्स्ट char * cstr" पैरामीटर वाला एक कन्स्ट्रक्टर है। क्या आपको लगता है कि यह हो सकता है? – hayesti
@ बॉब: [यह प्रश्न] (http://stackoverflow.com/questions/2346083/) आपके लिए ब्याज का हो सकता है। –