C++ में 'काउट अस्पष्ट है' त्रुटि

C Mem Ka Uta Aspasta Hai Truti



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

उदाहरण 1:

यह एक अस्पष्ट त्रुटि का उदाहरण है जो अधिकतर C++ प्रोग्रामिंग में होती है। यहां, हम देखेंगे कि जब हम एकाधिक नेमस्पेस का उपयोग करते हैं तो कंपाइलर कॉउट पर अस्पष्ट त्रुटियां कैसे उत्पन्न करता है। इस उदाहरण का कोड स्निपेट निम्नलिखित में उल्लिखित है:







#शामिल करें

नाम स्थान लैपटॉप {

खालीपन प्रदर्शन ( ) {

कक्षा :: अदालत << 'यह लैपटॉप नेमस्पेस है' << कक्षा :: अंतः ;

}

}

नाम स्थान गतिमान {

खालीपन प्रदर्शन ( ) {


कक्षा :: अदालत << 'यह मोबाइल नेमस्पेस है' << कक्षा :: अंतः ;

}

}

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

का उपयोग करते हुए नाम स्थान लैपटॉप ;
का उपयोग करते हुए नाम स्थान गतिमान ;

प्रदर्शन ( ) ;

वापस करना 0 ;


}

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





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





इस त्रुटि का समाधान कंपाइलर को अधिक समझ के लिए मुख्य फ़ंक्शन में संबंधित नेमस्पेस के साथ विधि को कॉल करना है। हम स्पष्ट रूप से निर्दिष्ट करते हैं कि हम अपने मुख्य निष्पादन भाग में नेमस्पेस की किस विधि को कॉल करना चाहते हैं।

#शामिल करें

नाम स्थान लैपटॉप {

खालीपन प्रदर्शन ( ) {


कक्षा :: अदालत << 'यह लैपटॉप नेमस्पेस है' << कक्षा :: अंतः ;

}

}

नाम स्थान गतिमान {

खालीपन प्रदर्शन ( ) {

कक्षा :: अदालत << 'यह मोबाइल नेमस्पेस है' << कक्षा :: अंतः ;

}

}

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

का उपयोग करते हुए नाम स्थान लैपटॉप ;
का उपयोग करते हुए नाम स्थान गतिमान ;
लैपटॉप :: प्रदर्शन ( ) ;
वापस करना 0 ;


}

यहां, हम मुख्य फ़ंक्शन में डिस्प्ले() विधि को 'लैपटॉप' नेमस्पेस से लिंक कर सकते हैं जैसा कि पिछले स्क्रीनशॉट में देखा गया है। अब, प्रोग्राम चलाएँ। आउटपुट कंसोल विंडो पर प्रदर्शित होता है।



उदाहरण 2:

यह परिदृश्य C++ में cout अस्पष्ट त्रुटि से संबंधित है। कंपाइलर एक त्रुटि दिखाता है जब वह निष्पादन प्रवाह को नहीं समझता है। इस उदाहरण का कोड स्निपेट निम्नलिखित में संलग्न है:

#शामिल करें

नाम स्थान सी भाषा {

खालीपन छपाई ( int यहाँ मैं ) {

कक्षा :: अदालत << 'सी भाषा का नामस्थान:' << मैं << कक्षा :: अंतः ;

}

}

नाम स्थान जावा {

खालीपन छपाई ( int यहाँ जे ) {

कक्षा :: अदालत << 'जावा भाषा का नामस्थान:' << जे << कक्षा :: अंतः ;

}

}

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

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

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

छपाई ( 5 ) ;
वापस करना 0 ;


}

इस कोड में, हम सभी आवश्यक लाइब्रेरी हेडर को परिभाषित करते हैं। हम अलग-अलग उद्देश्यों के लिए दो नामस्थान बनाते हैं। 'क्लैंग्वेज' नेमस्पेस में, हम एक 'प्रिंट' विधि को परिभाषित करते हैं जो उपयोगकर्ता से पूर्णांक मान लेता है। 'प्रिंट' फ़ंक्शन में, हम वह मान दिखाना चाहते हैं जो उपयोगकर्ता ने कंसोल स्क्रीन पर पारित किया है। हम अपने कोड में 'काउट' स्ट्रीम का उपयोग करके आवश्यक आउटपुट प्रदर्शित करते हैं। उसके बाद हम एक और नेमस्पेस परिभाषित करते हैं जिसका नाम “Java” है।

इस 'जावा' नेमस्पेस में, हम 'काउट' का उपयोग करके उपयोगकर्ता द्वारा पारित मूल्य को प्रदर्शित करने के लिए फिर से 'प्रिंट' विधि का उपयोग करते हैं। हम C++ में कंसोल विंडो पर वांछित आउटपुट प्राप्त करने के लिए अपने मुख्य फ़ंक्शन में उपयोग के लिए दोनों नेमस्पेस को कॉल करते हैं। 'मुख्य' फ़ंक्शन में, हम कंसोल स्क्रीन पर पारित मान दिखाने के लिए 'प्रिंट ()' ओवरलोडेड फ़ंक्शन को कॉल करते हैं।

मुख्य मेनू से 'निष्पादित करें' विकल्प पर क्लिक करें और 'संकलन और चलाएँ' विकल्प चुनें। इस कोड निष्पादन पर अस्पष्टता के बारे में त्रुटि उत्पन्न होती है। त्रुटि स्क्रीनशॉट इस प्रकार संलग्न है:

यह त्रुटि इंगित करती है कि कंपाइलर ओवरलोडेड प्रिंट() फ़ंक्शन के बारे में भ्रमित है जिसे कहा जाता है। यह त्रुटि लाइन 19 ''प्रिंट (5)'' पर है। कंपाइलर उस नेमस्पेस को लेकर भ्रमित है जिससे यह ओवरलोडेड फ़ंक्शन संबंधित है। शुरुआती लोग अधिकांश समय इस प्रकार की त्रुटियों में फंसे रहते हैं।

आइए इस त्रुटि को हल करें जो वास्तविकता में जटिल नहीं है। अस्पष्ट त्रुटियाँ आसानी से हल हो जाती हैं। हमें कंपाइलर की दृश्यता और समझ के लिए 'मुख्य' फ़ंक्शन में ओवरलोडेड फ़ंक्शन के साथ नेमस्पेस निर्दिष्ट करना होगा। जैसा कि इस प्रोग्राम में है, हम इस 'java::print(5)' को अपने मौजूदा कोड में जोड़ते हैं जैसा कि निम्नलिखित में बताया गया है:

#शामिल करें

नाम स्थान सी भाषा {

खालीपन छपाई ( int यहाँ मैं ) {

कक्षा :: अदालत << 'सी भाषा का नामस्थान:' << मैं << कक्षा :: अंतः ;

}

}

नाम स्थान जावा {

खालीपन छपाई ( int यहाँ जे ) {

कक्षा :: अदालत << 'जावा भाषा का नामस्थान:' << जे << कक्षा :: अंतः ;

}

}

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

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

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

जावा :: छपाई ( 5 ) ;
वापस करना 0 ;


}

अब, प्रोग्राम बिना किसी अस्पष्ट त्रुटि के पूरी तरह से निष्पादित होता है और कंसोल स्क्रीन पर आउटपुट प्रदर्शित करता है। इस प्रोग्राम का आउटपुट निम्नलिखित में संलग्न है:

उदाहरण 3:

यह किसी त्रुटि से संबंधित अंतिम और अंतिम उदाहरण है जो किसी अस्पष्ट समस्या के कारण उत्पन्न होती है। कंपाइलर को सही परिणाम नहीं मिल पाता. उपयोगकर्ता की बेहतर समझ के लिए इस उदाहरण का कोड स्निपेट निम्नलिखित में संलग्न है:

यहां, हम आवश्यक पुस्तकालयों को परिभाषित करते हैं। उसके बाद, हम एक नेमस्पेस परिभाषित करते हैं जिसमें वह क्लास शामिल है जिसमें हम कंसोल विंडो पर स्ट्रिंग प्रदर्शित करना चाहते हैं। हम इस परिभाषित नामस्थान को 'मुख्य' फ़ंक्शन में 'सी' वेरिएबल के साथ कहते हैं। उसके बाद, हम नेमस्पेस ऑब्जेक्ट का उपयोग करके प्रिंट() विधि को कॉल करते हैं। हम विधि कॉल के बाद स्ट्रिंग को कंसोल स्क्रीन पर फिर से प्रदर्शित करते हैं। आउटपुट दोनों स्ट्रिंग होना चाहिए और कंसोल स्क्रीन पर प्रदर्शित होना चाहिए। जब हम इस कोड को निष्पादित करते हैं, तो त्रुटि उत्पन्न होती है जैसा कि निम्नलिखित में दिखाया गया है:

#शामिल करें

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

नाम स्थान मेरा नामस्थान {

कक्षा अदालत {
जनता :
खालीपन छपाई ( ) {


अदालत << 'कस्टम कॉउट' << कक्षा :: अंतः ;

}

} ;

}

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

मेरा नामस्थान :: अदालत सी ;
सी। छपाई ( ) ;


अदालत << 'हैलो वर्ल्ड!' << कक्षा :: अंतः ;

वापस करना 0 ;

}

कंपाइलर ने कंसोल स्क्रीन पर डेटा प्रदर्शित करने वाले कॉउट स्टेटमेंट को नहीं चुना। कंपाइलर उस नेमस्पेस को नहीं समझ सकता जो कॉउट स्टेटमेंट से संबंधित है और एक त्रुटि उत्पन्न करता है। इस त्रुटि का समाधान कंपाइलर की पठनीयता और समझ के लिए एक कॉउट स्टेटमेंट के साथ एक नेमस्पेस ऑब्जेक्ट जोड़ना है। कॉउट स्टेटमेंट के साथ 'std::' जोड़ें और कोड चलाएँ। निम्नलिखित आउटपुट कंसोल स्क्रीन पर प्रदर्शित होता है:

निष्कर्ष

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