C++ में 'इनिशियलाइज़ेशन के लिए कोई मैचिंग कंस्ट्रक्टर नहीं' त्रुटि का समाधान कैसे करें

C Mem Inisiyala Izesana Ke Li E Ko I Maicinga Kanstraktara Nahim Truti Ka Samadhana Kaise Karem



C++ में एक कंस्ट्रक्टर एक विशेष सदस्य फ़ंक्शन होता है जिसका नाम उस क्लास के नाम के बाद होता है जिससे वह संबंधित होता है। इसका उपयोग ऑब्जेक्ट के सदस्यों के लिए कुछ उपयोगी मानों को आरंभ करने के लिए किया जाता है। यदि कंस्ट्रक्टर को उपयोगकर्ता द्वारा परिभाषित नहीं किया गया है, तो C++ कंपाइलर एक डिफ़ॉल्ट कंस्ट्रक्टर उत्पन्न करता है और कोई पैरामीटर और खाली बॉडी की अपेक्षा नहीं करता है। हालाँकि, जब कोई उपयोगकर्ता-परिभाषित कंस्ट्रक्टर होता है, तो उसके शरीर और मापदंडों को घोषित करना आवश्यक होता है।

C++ में 'इनिशियलाइज़ेशन के लिए कोई मैचिंग कंस्ट्रक्टर नहीं' त्रुटि का क्या कारण है?

C++ में कंस्ट्रक्टर के साथ व्यवहार करते समय 'इनिशियलाइज़ेशन के लिए कोई मैचिंग कंस्ट्रक्टर नहीं' त्रुटि का सामना करना पड़ता है, ऐसा आमतौर पर इसलिए होता है क्योंकि जब कंस्ट्रक्टर को कंपाइलर द्वारा डिफ़ॉल्ट कंस्ट्रक्टर कहा जाता है, तो वह नहीं बनाया जाता है, इसलिए आपको कंस्ट्रक्टर के पैरामीटर और बॉडी को स्वयं घोषित करना होगा। उचित पैरामीटर घोषित करने में विफल रहने के परिणामस्वरूप इस प्रकार की कंस्ट्रक्टर त्रुटि होती है।







एक साधारण टेक्स्ट फ़ाइल बनाएं, उसमें स्क्वायर() फ़ंक्शन का कोड पेस्ट करें, और इसे .h एक्सटेंशन के साथ सहेजें। अब इस फ़ाइल को CPP कंपाइलर के बिन फ़ोल्डर के शामिल फ़ोल्डर में पेस्ट करें। अब इस हेडर फ़ाइल को main.cpp में कॉल करने पर यह फ़ाइल कंपाइलर द्वारा पढ़ी जाएगी।



स्क्वायर.एच हेडर फ़ाइल

#ifndef SQUARE_H

#SQUARE_H को परिभाषित करें


कक्षा वर्ग {

निजी :

दोहरा लंबाई ;

दोहरा चौड़ाई ;

जनता :

वर्ग ( दोहरा , दोहरा ) ;

दोहरा लम्बाई प्राप्त करें ( ) कॉन्स्ट ;

दोहरा चौड़ाई प्राप्त करें ( ) कॉन्स्ट ;

} ;



वर्ग :: वर्ग ( दोहरा मैं, दोहरा में ) {

लंबाई = एल ;
चौड़ाई = में ;

}



दोहरा वर्ग :: चौड़ाई प्राप्त करें ( ) कॉन्स्ट { वापस करना चौड़ाई ; }

दोहरा वर्ग :: लम्बाई प्राप्त करें ( ) कॉन्स्ट { वापस करना लंबाई ; }



#अगर अंत

main.cpp हेडर फ़ाइल

#शामिल करें

#शामिल करें 'स्क्वायर.एच'

का उपयोग करते हुए नाम स्थान कक्षा ;



int यहाँ मुख्य ( )

{

चौकोर डिब्बा1 ( 10.0 , 10.0 ) ;

चौकोर डिब्बा2 ;



अदालत << 'बॉक्स 1 की चौड़ाई और लंबाई:' << बॉक्स1. चौड़ाई प्राप्त करें ( ) << ', ' << बॉक्स1. लम्बाई प्राप्त करें ( ) << अंतः ;

अदालत << 'बॉक्स 2 की चौड़ाई और लंबाई:' << डिब्बा2. चौड़ाई प्राप्त करें ( ) << ', ' << डिब्बा2. लम्बाई प्राप्त करें ( ) << अंतः ;



डिब्बा2 = बॉक्स1 ;

अदालत << 'जब वर्गाकार डिब्बा 1, वर्गाकार डिब्बा 2 के बराबर है' << अंतः ;

अदालत << 'बॉक्स 1 की चौड़ाई और लंबाई:' << बॉक्स1. चौड़ाई प्राप्त करें ( ) << ', ' << बॉक्स1. लम्बाई प्राप्त करें ( ) << अंतः ;

अदालत << 'बॉक्स 2 की चौड़ाई और लंबाई:' << डिब्बा2. चौड़ाई प्राप्त करें ( ) << ', ' << डिब्बा2. लम्बाई प्राप्त करें ( ) << अंतः ;



वापस करना 0 ;

}

इस प्रोग्राम में, उपयोगकर्ता दो वर्गाकार बक्सों की लंबाई और चौड़ाई इनपुट करता है और फिर दोनों बक्सों को बराबर करता है और उनकी लंबाई और चौड़ाई लौटाता है:




कंपाइलर पंक्ति#14 में त्रुटि लौटाता है क्योंकि ठेकेदार दो तर्कों की अपेक्षा करता है जबकि इसमें कोई तर्क प्रदान नहीं किया गया है:





पंक्ति#8 में कंपाइलर कंस्ट्रक्टर में एक त्रुटि देता है क्योंकि तर्क प्रदान नहीं किए गए हैं जबकि परिभाषित तर्क होने चाहिए।

C++ में 'इनिशियलाइज़ेशन के लिए कोई मैचिंग कंस्ट्रक्टर नहीं' त्रुटि का समाधान कैसे करें

कंपाइलर main.cpp कोड की लाइन#8 में त्रुटि प्रदर्शित करता है क्योंकि स्क्वायर के डिफ़ॉल्ट कंस्ट्रक्टर को इनवॉक करने का प्रयास किया जाता है। कंपाइलर एक डिफ़ॉल्ट कंस्ट्रक्टर उत्पन्न नहीं कर सकता क्योंकि पहले से ही उपयोगकर्ता द्वारा परिभाषित कंस्ट्रक्टर है जो दो तर्क लेता है। इसलिए, इसके पैरामीटर इस प्रकार निर्दिष्ट करें:



चौकोर डिब्बा2 ( 0 , 10 ) ;

एक कंपाइलर एक डिफ़ॉल्ट कंस्ट्रक्टर तभी उत्पन्न करता है जब उसके पास कोई उपयोगकर्ता-परिभाषित कंस्ट्रक्टर नहीं होता है। तो इस मामले में जब कोई कंस्ट्रक्टर परिभाषित होता है, तो डिफ़ॉल्ट कंस्ट्रक्टर उपयोगकर्ता द्वारा प्रदान किया जाना चाहिए। तो, इस उद्देश्य के लिए, स्क्वायर.एच फ़ाइल में दो-तर्क कंस्ट्रक्टर में डिफ़ॉल्ट तर्क भी प्रदान करें। यह डेटा को अप्रारंभित नहीं छोड़ता है।

वर्ग :: वर्ग ( दोहरा एल = 0 , दोहरा में = 0 )

कंस्ट्रक्टर त्रुटि को कंस्ट्रक्टर और उसके मापदंडों को ठीक से कॉल और घोषित करके ठीक किया जा सकता है। Main.cpp और स्क्वायर.h में कोड ऊपर दिए गए निर्देशों के अनुसार बदले जाते हैं। और नो-मैचिंग कंस्ट्रक्टर त्रुटि का समाधान हो गया है। यह हेडर फ़ाइल के लिए अद्यतन कोड है:

यह मुख्य फ़ाइल के लिए अद्यतन कोड है:

डीबगिंग त्रुटियों के बाद उपरोक्त कोड निम्नलिखित आउटपुट लौटाते हैं:

दो वर्गाकार बक्सों की चौड़ाई और लंबाई उपयोगकर्ता द्वारा प्रदान की जाती है, और उनके पैरामीटर वापस कर दिए जाते हैं। बाद में दोनों बक्सों को समान बनाने के लिए एक शर्त लागू की जाती है, और फिर उनकी नई संगत लंबाई और चौड़ाई मान वापस कर दिए जाएंगे।

निष्कर्ष

C++ में एक कंस्ट्रक्टर एक विशेष सदस्य फ़ंक्शन होता है जिसका नाम उस क्लास के नाम के बाद होता है जिससे वह संबंधित होता है। इसका उपयोग ऑब्जेक्ट के सदस्यों के लिए कुछ उपयोगी मानों को आरंभ करने के लिए किया जाता है। C++ में 'इनिशियलाइज़ेशन के लिए कोई मैचिंग कंस्ट्रक्टर नहीं' त्रुटि का सामना तब करना पड़ता है जब कंस्ट्रक्टर की घोषणा में कोई त्रुटि होती है। आमतौर पर, C++ कंपाइलर स्वयं एक कंस्ट्रक्टर उत्पन्न करता है, लेकिन जब कंस्ट्रक्टर्स को उपयोगकर्ता द्वारा घोषित किया जाता है तो ऐसी त्रुटियों का सामना करने से बचने के लिए कंस्ट्रक्टर के पैरामीटर और बॉडी की उचित घोषणा होनी चाहिए।