"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > C++ में ''क्लास के लिए कोई डिफॉल्ट कंस्ट्रक्टर मौजूद नहीं है'' त्रुटि क्यों आती है, और मैं इसे कैसे ठीक कर सकता हूं?

C++ में ''क्लास के लिए कोई डिफॉल्ट कंस्ट्रक्टर मौजूद नहीं है'' त्रुटि क्यों आती है, और मैं इसे कैसे ठीक कर सकता हूं?

2024-12-22 को प्रकाशित
ब्राउज़ करें:422

Why Does C   Throw a \

सी में त्रुटि "क्लास के लिए कोई डिफॉल्ट कंस्ट्रक्टर मौजूद नहीं है" को समझना

सी में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के साथ काम करते समय, डिफॉल्ट कंस्ट्रक्टर से संबंधित त्रुटियों का सामना करना असामान्य नहीं है। यह व्यापक मार्गदर्शिका आपको "क्लास के लिए कोई डिफॉल्ट कंस्ट्रक्टर मौजूद नहीं है" समस्या को समझने और हल करने में सहायता करेगी। किसी वर्ग का एक ऑब्जेक्ट, उसके कंस्ट्रक्टर को आवश्यक तर्क प्रदान किए बिना। एक डिफ़ॉल्ट कंस्ट्रक्टर एक विशेष सदस्य फ़ंक्शन है जो किसी ऑब्जेक्ट को उसके डिफ़ॉल्ट मानों के साथ प्रारंभ करता है जब कोई तर्क निर्दिष्ट नहीं किया जाता है।

त्रुटि का कारण

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

Resolution

इस त्रुटि को हल करने के लिए, आपके पास तीन विकल्प हैं:

1 . एक डिफॉल्ट कंस्ट्रक्टर को परिभाषित करें:

आप क्लास के भीतर एक डिफॉल्ट कंस्ट्रक्टर को परिभाषित कर सकते हैं जो कोई तर्क नहीं लेता है, जैसा कि नीचे सही क्लास में देखा गया है:

क्लास गेमक्रिप्टोग्राफी { जनता: ब्लोफिश _ब्लोफिश; गेमक्रिप्टोग्राफी(); शून्य डिक्रिप्ट (अहस्ताक्षरित चार पैकेट []); शून्य एन्क्रिप्ट (अहस्ताक्षरित चार पैकेट []); ब्लोफिश ब्लोफिश; शून्य सेटकी (अहस्ताक्षरित चार k[]); शून्य SetIvs(अहस्ताक्षरित चार i1[], अहस्ताक्षरित चार i2[]); };

2. मौजूदा कंस्ट्रक्टर को तर्क प्रदान करें:
class GameCryptography
{
public:
    Blowfish _blowfish;
    GameCryptography();
    void Decrypt(unsigned char packet[]);
    void Encrypt(unsigned char packet[]);
    Blowfish Blowfish;
    void SetKey(unsigned char k[]);
    void SetIvs(unsigned char i1[],unsigned char i2[]);
};
ऑब्जेक्ट को इंस्टेंट करते समय, आप डिफ़ॉल्ट कंस्ट्रक्टर की आवश्यकता को हटाते हुए, कंस्ट्रक्टर को स्पष्ट रूप से आवश्यक तर्क प्रदान कर सकते हैं।

3. "nullptr" इनिशियलाइज़र का उपयोग करें:

यह विकल्प केवल C 20 में लागू है और आपको डिफॉल्ट कंस्ट्रक्टर को स्पष्ट रूप से परिभाषित किए बिना किसी ऑब्जेक्ट को nullptr में आरंभ करने की अनुमति देता है:

GameCryptography* gc = nullptr;
अतिरिक्त विचार

class GameCryptography
{
public:
    Blowfish _blowfish;
    GameCryptography();
    void Decrypt(unsigned char packet[]);
    void Encrypt(unsigned char packet[]);
    Blowfish Blowfish;
    void SetKey(unsigned char k[]);
    void SetIvs(unsigned char i1[],unsigned char i2[]);
};
ए। एक एल्गोरिदम निर्दिष्ट करना:

यह ध्यान रखना महत्वपूर्ण है कि संचालन के तरीके, जैसे ईसीबी और सीबीसी, को स्वयं एल्गोरिदम नहीं माना जाता है। उन्हें इस तरह संदर्भित करने से गलतफहमी पैदा हो सकती है।

बी। संकलन-समय बनाम रन-टाइम त्रुटियाँ:

डिफ़ॉल्ट कंस्ट्रक्टर त्रुटियाँ आमतौर पर संकलन समय पर पाई जाती हैं। यह रन-टाइम त्रुटियों के विपरीत है, जो प्रोग्राम निष्पादन के दौरान होती है।

इस गाइड में प्रस्तुत कारणों और समाधान विधियों को समझकर, आप प्रभावी ढंग से काम करते समय "क्लास के लिए कोई डिफ़ॉल्ट कंस्ट्रक्टर मौजूद नहीं है" त्रुटियों से निपट सकते हैं। सी कक्षाएं।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3