Ich habe ein Problem mit diesem Strukturkonstruktor, wenn ich versuche, diesen Code zu kompilieren:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
Wenn ich komme, tritt dieser Fehler auf:
\linkedlist\linkedlist.h||In constructor `Node::Node(int)':|
\linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|
Das letzte Problem war die Struktur, aber es hat gut funktioniert, als es in meiner main.cpp war, diesmal in einer Header-Datei und gibt mir dieses Problem. Ich verwende Code :: Blocks, um diesen Code zu kompilieren
<cstddef>
ist die sauberere Option.Verwenden Sie NULL. Es ist sowieso nur #defined als 0 und es ist sehr nützlich, es semantisch von der Ganzzahl 0 zu unterscheiden.
Es gibt Probleme bei der Verwendung von 0 (und damit NULL). Beispielsweise:
Die nächste Version von C ++ (C ++ 0x) enthält
nullptr
, um dies zu beheben.quelle
((void *)0)
bei den meisten C-Standardbibliotheksimplementierungen definiert .((void *)0)
ist in C ++ falsch, davoid*
es nicht auf andere Zeigertypen erzwungen werden kann, wie dies beispielsweise in C. glibc der Fall ist,#define NULL 0
wenn dies__cplusplus
definiert ist.NULL
ist kein nativer Teil der C ++ - Kernsprache, aber Teil der Standardbibliothek. Sie müssen eine der Standard-Header-Dateien einschließen, die die Definition enthält.#include <cstddef>
oder#include <stddef.h>
sollte ausreichen.Die Definition von
NULL
ist garantiert verfügbar, wenn Siecstddef
oder einschließenstddef.h
. Es ist nicht garantiert, aber es ist sehr wahrscheinlich, dass die Definition enthalten ist, wenn Sie stattdessen viele der anderen Standardheader einfügen.quelle
Fügen Sie "stdlib.h" oder "cstdlib" in diese Datei ein? NULL ist in stdlib.h / cstdlib definiert
oder
quelle
Nicht verwenden
NULL
, C ++ ermöglicht es Ihnen,0
stattdessen das schmucklose zu verwenden:Und, wie bei C ++ 11, sollten Sie in der Regel nicht entweder mit
NULL
oder0
da es bietet Ihnennullptr
den Typsstd::nullptr_t
, die besser für die Aufgabe geeignet ist.quelle