मुझे यह संदेश तब मिलता है जब g ++ 4.3 पर C ++ संकलित किया जाता है
error: ‘NULL’ was not declared in this scope
यह प्रकट होता है और गायब हो जाता है और मुझे नहीं पता कि क्यों। क्यों?
धन्यवाद।
मुझे यह संदेश तब मिलता है जब g ++ 4.3 पर C ++ संकलित किया जाता है
error: ‘NULL’ was not declared in this scope
यह प्रकट होता है और गायब हो जाता है और मुझे नहीं पता कि क्यों। क्यों?
धन्यवाद।
जवाबों:
NULLकोई कीवर्ड नहीं है। यह कुछ मानक हेडर में परिभाषित एक पहचानकर्ता है। आप शामिल कर सकते हैं
#include <cstddef>
कुछ अन्य मूल बातों, जैसे सहित, इसे दायरे में लाने के लिए std::size_t।
nullptrकीवर्ड को ध्यान देने योग्य हो सकता है , जो कि एक वास्तविक कीवर्ड है और इसके लिए किसी भी #includes की आवश्यकता नहीं है । यह भी अधिक से अधिक प्रकार है NULL।
GCC C ++ 11 की ओर कदम उठा रहा है, यही कारण है कि अब आपको NULL निरंतर उपयोग करने के लिए cstddef को शामिल करने की आवश्यकता है । C ++ 11 में पसंदीदा तरीका नए nullptr कीवर्ड का उपयोग करना है , जो कि संस्करण 4.6 के बाद से GCC में लागू है। nullptr अभिन्न प्रकार के लिए अभिसारी रूप से परिवर्तनीय नहीं है, इसलिए इसका उपयोग किसी फ़ंक्शन को कॉल करने के लिए किया जा सकता है जो पॉइंटर और अभिन्न प्रकार दोनों के लिए अधिभारित किया गया है:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULLएक अंतर्निहित कीवर्ड कभी नहीं रहा है; यह <stddef.h>(या <cstddef>) सहित कई मानक सी हेडर में परिभाषित मैक्रो है । कैसे "सी ++ 11 की ओर कदम" को प्रभावित करता है? मुझे इस प्रश्न में कुछ भी नहीं दिखाई देता है जिसका अर्थ है कि (अनदेखी) कोड gcc / g ++ के पुराने संस्करणों के साथ या भाषा मानक के पुराने संस्करणों के साथ संकलित है।
NULLएक कीवर्ड नहीं है; यह 0 के लिए एक मैक्रो प्रतिस्थापन है, और में आता है stddef.hया cstddef, मेरा मानना है। आपने #includedएक उपयुक्त शीर्ष लेख फ़ाइल नहीं बनाई है, इसलिए g ++ NULLएक नियमित चर नाम के रूप में देखता है , और आपने इसे घोषित नहीं किया है।
अन्य उत्तरों को पूरा करने के लिए: यदि आप C ++ 11 का उपयोग कर रहे हैं, तो उपयोग करें nullptr, जो कि एक कीवर्ड है जिसका अर्थ शून्य को इंगित करने वाला शून्य सूचक है। (इसके बजाय NULL, जो सूचक प्रकार नहीं है)