Ich erhalte diese Meldung beim Kompilieren von C ++ unter gcc 4.3
error: ‘NULL’ was not declared in this scope
Es erscheint und verschwindet und ich weiß nicht warum. Warum?
Vielen Dank.
Ich erhalte diese Meldung beim Kompilieren von C ++ unter gcc 4.3
error: ‘NULL’ was not declared in this scope
Es erscheint und verschwindet und ich weiß nicht warum. Warum?
Vielen Dank.
Antworten:
NULL
ist kein Schlüsselwort. Es ist eine Kennung, die in einigen Standardheadern definiert ist. Sie können einschließen
#include <cstddef>
Um es im Umfang zu haben, einschließlich einiger anderer Grundlagen, wie std::size_t
.
nullptr
Schlüsselwort erwähnt werden, das ein tatsächliches Schlüsselwort ist und kein #include
s erfordert . Es ist auch typsicherer als NULL
.
GCC unternimmt Schritte in Richtung C ++ 11, weshalb Sie jetzt wahrscheinlich cstddef einschließen müssen, um die NULL- Konstante zu verwenden. In C ++ 11 wird bevorzugt das neue Schlüsselwort nullptr verwendet , das seit Version 4.6 in GCC implementiert ist. nullptr ist nicht implizit in integrale Typen konvertierbar, daher kann es verwendet werden, um einen Aufruf einer Funktion zu eindeutig zu machen, die sowohl für Zeiger- als auch für integrale Typen überladen wurde:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
war noch nie ein eingebautes Schlüsselwort; Es ist ein Makro, das in mehreren Standard-C-Headern definiert ist, einschließlich <stddef.h>
(oder <cstddef>
). Wie wirkt sich gcc "Schritte in Richtung C ++ 11" darauf aus? Ich sehe nichts in der Frage, was impliziert, dass der (unsichtbare) Code mit früheren Versionen von gcc / g ++ oder mit früheren Versionen des Sprachstandards kompiliert wurde.
NULL
ist kein Schlüsselwort; Es ist eine Makrosubstitution für 0 und kommt herein stddef.h
oder cstddef
, glaube ich. Sie haben keine #included
entsprechende Header-Datei, daher wird in g ++ NULL
ein regulärer Variablenname angezeigt, und Sie haben ihn nicht deklariert.
So vervollständigen Sie die anderen Antworten: Wenn Sie C ++ 11 verwenden, verwenden Sie nullptr
dieses Schlüsselwort, das einen ungültigen Zeiger bedeutet, der auf null zeigt. (statt NULL
, was kein Zeigertyp ist)