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:
NULList 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.
nullptrSchlüsselwort erwähnt werden, das ein tatsächliches Schlüsselwort ist und kein #includes 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.
NULLwar 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.
NULList kein Schlüsselwort; Es ist eine Makrosubstitution für 0 und kommt herein stddef.hoder cstddef, glaube ich. Sie haben keine #includedentsprechende Header-Datei, daher wird in g ++ NULLein regulärer Variablenname angezeigt, und Sie haben ihn nicht deklariert.
So vervollständigen Sie die anderen Antworten: Wenn Sie C ++ 11 verwenden, verwenden Sie nullptrdieses Schlüsselwort, das einen ungültigen Zeiger bedeutet, der auf null zeigt. (statt NULL, was kein Zeigertyp ist)