Mam problem z tym konstruktorem struktury, gdy próbuję skompilować ten kod:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
kiedy przychodzę pojawia się ten błąd:
\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 ===|
Ostatnim problemem była struktura, ale działała dobrze, gdy znajdowała się w moim main.cpp, tym razem jest w pliku nagłówkowym i daje mi ten problem. Do kompilacji tego kodu używam Code :: Blocks
<cstddef>
to czystsza opcja.Używaj NULL. To jest po prostu #definiowane jako 0 i tak jest bardzo przydatne do semantycznego odróżnienia go od liczby całkowitej 0.
Występują problemy z używaniem 0 (i stąd NULL). Na przykład:
void f(int); void f(void*); f(0); // Ambiguous. Calls f(int).
Następna wersja C ++ (C ++ 0x) zawiera
nullptr
rozwiązanie tego problemu.f(nullptr); // Calls f(void*).
źródło
((void *)0)
w większości implementacji standardowych bibliotek C.((void *)0)
jest niepoprawny w C ++, ponieważvoid*
nie jest konwertowany do innych typów wskaźników, tak jak w C. glibc, na przykład,#define NULL 0
gdy__cplusplus
jest zdefiniowany.NULL
nie jest natywną częścią podstawowego języka C ++, ale jest częścią standardowej biblioteki. Musisz dołączyć jeden ze standardowych plików nagłówkowych, które zawierają jego definicję.#include <cstddef>
lub#include <stddef.h>
powinno wystarczyć.Definicja z
NULL
pewnością będzie dostępna, jeśli dołączyszcstddef
lubstddef.h
. Nie jest to gwarantowane, ale jest bardzo prawdopodobne, że zostanie dołączona jego definicja, jeśli zamiast tego dołączysz wiele innych standardowych nagłówków.źródło
Czy dołączasz „stdlib.h” lub „cstdlib” do tego pliku? NULL jest zdefiniowany w stdlib.h / cstdlib
#include <stdlib.h>
lub
#include <cstdlib> // This is preferrable for c++
źródło
Nie używaj
NULL
, C ++ pozwala0
zamiast tego używać nie zdobionych :previous = 0; next = 0;
I podobnie jak w C ++ 11, generalnie nie powinieneś używać żadnego z nich
NULL
lub0
ponieważ zapewnia onnullptr
typstd::nullptr_t
, który jest lepiej dopasowany do zadania.źródło