सी ++ त्रुटि: कोई व्यवहार्य ओवरलोडेड '=':

Si Truti Ko I Vyavaharya Ovaralodeda



त्रुटियाँ वे ऑपरेशन हैं जो किसी भी कोड के असामान्य कार्य का परिणाम हो सकते हैं। लिखने के समय त्रुटि का पता नहीं लगाया जा सकता है जब तक कि हमने कोड निष्पादित नहीं किया है या इसे संकलित नहीं किया है। कुछ त्रुटियां कोड को तब तक निष्पादित करने से रोकती हैं जब तक कि उन्हें हटा नहीं दिया जाता। आज, हम एक एरर पर भी चर्चा करेंगे जो प्रोग्राम के कंपाइल होने पर भी होती है, वह है 'एरर: नो मैच फॉर 'ऑपरेटर =''। यह त्रुटि ऐसे कारणों से हो सकती है जैसे: यदि हमने उस पॉइंटर को पास कर दिया है जहाँ स्ट्रिंग को पारित किया जाना है, स्थिर चर को संशोधित करना, आदि। 'कोई व्यवहार्य अतिभारित' त्रुटि को दूर करना मुश्किल नहीं है, लेकिन मुख्य कार्य है त्रुटि को समझें क्योंकि यह त्रुटि के किसी भी विवरण के बिना केवल त्रुटि दिखाता है।

वाक्य - विन्यास

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







गलती : कोई मुकाबला नहीं के लिये 'ऑपरेटर = '

उदाहरण # 01:

आइए हम इस त्रुटि और इसे दूर करने की विधि के बारे में एक विचार प्राप्त करें। इसे बेहतर ढंग से समझने के लिए, हम एक उदाहरण परफॉर्म करेंगे जिसमें हम फंक्शन में ऑब्जेक्ट्स का उपयोग करके नामों को पास करने जा रहे हैं और फिर यह उन्हें प्रदर्शित करेगा। हम सबसे पहले हेडर फाइल iostream को शामिल करेंगे। उसके बाद, हम 'my_object' नामक एक वर्ग घोषित करेंगे। जिसके अंदर, हमने 'F_name' और 'L_name' नामक दो स्ट्रिंग वेरिएबल घोषित किए हैं, 'F_name' जो उस व्यक्ति के पहले नाम को इंगित करता है जहां 'L_name' व्यक्ति के अंतिम नाम को इंगित करता है।



इसके बाद, हमने 'my_object ()' नामक एक सार्वजनिक कन्स्ट्रक्टर घोषित किया है जिसमें हमने 'F_name' और 'L_name' दोनों चरों के लिए शून्य मान निर्दिष्ट किए हैं। उसके बाद, हमने एक और फ़ंक्शन घोषित किया जिसमें हमने स्ट्रिंग प्रकार के चर 'fn' और 'ln' पास किए हैं। उसके अंदर, हमने name_set() मेथड कॉल किया। फिर, हमने दो सदस्य कार्यों 'शो ()' और 'name_set ()' की घोषणा की। जब 'शो () फ़ंक्शन कहा जाता है, तो यह पहले नाम और अंतिम नाम एक साथ प्रदर्शित करेगा। जबकि, 'set_name ()' सदस्य फ़ंक्शन में, हमने स्ट्रिंग प्रकार 'fn' और 'ln' के दो स्ट्रिंग चर पारित किए हैं, जिन्हें हमने दूसरे कंस्ट्रक्टर को भी पास किया है।



अब, वर्ग my_object के कॉपी असाइनमेंट ऑपरेटर का उपयोग करके, हम 'my_object' प्रकार का एक पैरामीटर लेते हैं। कंपाइलर हमेशा इसे किसी भी वर्ग के इनलाइन सार्वजनिक सदस्य के रूप में घोषित करता है। इस सदस्य के अंदर, हमने 'F_name' को src.F_name और 'L_name' को src.L_name असाइन किया है कि हमने 'F_name' और 'L_name' की कॉपी को बरकरार रखा है। यह वर्ग my_object के सदस्यों को दिया जाता है। अब, हमने वर्ग my_cobject का एक ऑब्जेक्ट घोषित किया है जिसका नाम 'name1' है, जिसके लिए हमने दो तार 'अन्ना' और 'स्मिथ' को एक तर्क के रूप में पारित किया है। यह कन्स्ट्रक्टर को कॉल करेगा और अंतिम नाम के साथ पहला नाम प्रदर्शित करेगा।





उसके बाद, हमने एक और ऑब्जेक्ट “name2” बनाया और फिर उस ऑब्जेक्ट को अलग से नाम दिया। दोनों ऑब्जेक्ट्स के लिए कंस्ट्रक्टर को वैल्यू पास करने के बाद, हमने शो () मेथड को कॉल किया, जो फिर दोनों ऑब्जेक्ट्स 'nam1' और 'name2' के लिए नाम प्रदर्शित करेगा। कोड के अंत में, हमने शून्य मान लौटाया और अपना कोड निष्पादित किया।

शामिल
कक्षा my_object {
निजी :
कक्षा :: डोरी एफ_नाम, एल_नाम ;
जनता :
my_object ( ) { F_नाम = '' ; नाम = '' ; }
my_object ( कक्षा :: डोरी एफएन, एसटीडी :: डोरी एलएन ) {
name_set ( एफएन, एलएन ) ;
}
शून्य प्रदर्शन ( ) { कक्षा :: अदालत << 'नाम है ' << F_नाम << '' << नाम << '। \एन ' ; }
शून्य name_set ( कक्षा :: डोरी एफएन, एसटीडी :: डोरी एलएन ) { F_नाम = fn ; नाम = एलएन ; }
my_object और ऑपरेटर = ( स्थिरांक my_object और स्रोत ) {
F_नाम = स्रोत। F_नाम ;
नाम = स्रोत। नाम ;
वापसी * यह ;
}

} ;
पूर्णांक मुख्य ( पूर्णांक एआरजीसी, चार ** argv ) {
my_object का नाम1 ( 'अन्ना' , 'स्मिथ' ) ;
my_object name2 ;
नाम2 = ( 'अन्ना' , 'स्मिथ' ) ;
नाम1। प्रदर्शन ( ) ;
नाम2। प्रदर्शन ( ) ;
वापसी 0 ;
}

हमारे कोड के निष्पादन के बाद, हमारे पास यह त्रुटि है जो प्रदर्शित करती है कि हमने लाइन 24 पर गलत कोड लिखा है जो उस प्रकार की त्रुटि का संकेत देता है जो 'त्रुटि: 'ऑपरेटर =' के लिए कोई मेल नहीं है'। अब हम इस त्रुटि को दूर करने का प्रयास करेंगे।



इस त्रुटि को हल करने के लिए, हमारे पास किसी भी वर्ग के निर्माता को मान पास करने के कई तरीके हैं। पहली विधि में, हम केवल 'name1' ऑब्जेक्ट को 'name2' असाइन करेंगे क्योंकि हमने दोनों ऑब्जेक्ट्स के लिए समान मान पास किए हैं, इसलिए उन्हें अलग-अलग पास करने की कोई आवश्यकता नहीं है। अब हम कोड निष्पादित करते हैं।

पूर्णांक मुख्य ( पूर्णांक एआरजीसी, चार ** argv ) {

my_object का नाम1 ( 'अन्ना' , 'स्मिथ' ) ;
my_object name2 ;
नाम2 = नाम1 ;
नाम1। प्रदर्शन ( ) ;
नाम2। प्रदर्शन ( ) ;

ऊपर दिखाए गए अनुसार कोड में परिवर्तन करने के बाद, हमारे पास नीचे स्निपेट में दिया गया परिणाम है। हमने प्रदर्शित किया है कि कंस्ट्रक्टर को दिया गया नाम बिना किसी त्रुटि के सफलतापूर्वक प्रदर्शित होता है।

इस त्रुटि को हल करने का दूसरा तरीका है जब हमें दोनों वस्तुओं के लिए अलग-अलग मान पास करने होते हैं। हम केवल क्लास के नाम का उपयोग उन मानों के साथ करेंगे जिन्हें एक तर्क के रूप में कंस्ट्रक्टर को पास किया जाना है। हमने पहला नाम 'झोन' और दूसरा नाम 'स्मिथ' पारित किया। फिर, हमने कोड निष्पादित किया।

पूर्णांक मुख्य ( पूर्णांक एआरजीसी, चार ** argv ) {

my_object का नाम1 ( 'अन्ना' , 'स्मिथ' ) ;
my_object name2 ;
नाम2 = my_object ( 'जॉन स्मिथ' ) ;

नाम1। प्रदर्शन ( ) ;
नाम2। प्रदर्शन ( ) ;

उपरोक्त जोड़े गए कोड को निष्पादित करने के बाद, जैसा कि नीचे दिखाया गया है, हमारे पास आउटपुट है। ऑब्जेक्ट 'name1' के लिए, उसने 'अन्ना स्मिथ' नाम प्रदर्शित किया और दूसरी वस्तु 'name2' के लिए उसने 'Jhone Smith' प्रदर्शित किया। लेकिन इस बार हमारे कोड ने बिना किसी त्रुटि के ठीक से काम किया।

अब, हम अपने कोड को सफलतापूर्वक क्रियान्वित करने के लिए एक और तरीका आजमाएंगे। जैसा कि उपरोक्त मामलों में, हमने असाइनमेंट ऑपरेटर का उपयोग करके वस्तुओं को मान निर्दिष्ट करने का प्रयास किया। लेकिन इस बार, हम वस्तु की घोषणा के समय मूल्यों को पारित करेंगे। जैसा कि हम नीचे दिए गए स्निपेट में देख सकते हैं, ऑब्जेक्ट 'नाम1' की घोषणा के समय, हमने 'नाम2' के लिए उसी चरण को दोहराते हुए ऑब्जेक्ट के तर्क के रूप में मान पारित किए। अब, हम कोड को एक बार फिर से निष्पादित करते हैं।

पूर्णांक मुख्य ( पूर्णांक एआरजीसी, चार ** argv ) {
my_object का नाम1 ( 'अन्ना' , 'स्मिथ' ) ;
my_object name2 ( 'जॉन स्मिथ' ) ;
नाम1। प्रदर्शन ( ) ;
नाम2। प्रदर्शन ( ) ;

इस समय के लिए भी कोड निष्पादित होने के बाद, हमें कोई त्रुटि नहीं मिली है, जिसका अर्थ है कि यह हमें कोई त्रुटि होने से भी रोकेगा।

निष्कर्ष

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