मुझे यह संदेश तब मिलता है जब 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
कीवर्ड को ध्यान देने योग्य हो सकता है , जो कि एक वास्तविक कीवर्ड है और इसके लिए किसी भी #include
s की आवश्यकता नहीं है । यह भी अधिक से अधिक प्रकार है 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
, जो सूचक प्रकार नहीं है)