wake-up-neo.com

fehler: 'NULL' wurde in diesem Bereich nicht deklariert

Ich bekomme 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.

112
jackhab

NULL ist kein Schlüsselwort. Es ist ein Bezeichner, der in einigen Standard-Headern definiert ist. Sie können einschließen 

#include <cstddef>

Um es in den Geltungsbereich zu bringen, einschließlich einiger anderer Grundlagen, wie std::size_t.

168

GCC unternimmt Schritte in Richtung auf C++ 11, weshalb Sie jetzt cstddef verwenden müssen, um die KonstanteNULLzu verwenden. Die bevorzugte Methode in C++ 11 ist die Verwendung des neuen Schlüsselworts nullptr , das seit Version 4.6 in GCC implementiert ist. nullptr ist nicht implizit in Integraltypen konvertierbar. Daher kann es verwendet werden, um einen Aufruf einer Funktion zu disambiguieren, die für Zeiger- und Integraltypen überladen wurde:

void f(int x);
void f(void * ptr);

f(0);  // Passes int 0.
f(nullptr);  // Passes void * 0.
34
Seppo Enarvi

NULL ist kein Schlüsselwort. Es ist eine Makroersetzung für 0 und kommt in stddef.h oder cstddef, glaube ich. Sie haben #included keine passende Header-Datei, so dass NULL von g ++ als regulärer Variablenname betrachtet wird und Sie ihn nicht deklariert haben.

10
David Thornley

Um die anderen Antworten zu vervollständigen: Wenn Sie C++ 11 verwenden, verwenden Sie nullptr, ein Schlüsselwort, das einen leeren Zeiger bedeutet, der auf null zeigt. (statt NULL, bei dem es sich nicht um einen Zeigertyp handelt)

4
Leonardo Raele

NULL kann auch gefunden werden in: 

#include <string.h>

String.h zieht die NULL von woanders ab.

0
Owl

Sie können das Makro als NULL deklarieren. Fügen Sie das nach Ihren #inschlüssen hinzu:

#define NULL 0

oder

#ifndef NULL
#define NULL 0
#endif

Nein ";" am ende der anweisungen ...

0
Derzu