У меня проблема с этим конструктором структуры, когда я пытаюсь скомпилировать этот код:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
когда я прихожу, возникает эта ошибка:
\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 ===|
Последней проблемой была структура, но она работала нормально, когда она была в моем main.cpp, на этот раз она находится в файле заголовка и вызывает у меня эту проблему. Я использую Code :: Blocks для компиляции этого кода
<cstddef>
это более чистый вариант.Используйте NULL. В любом случае это просто # определено как 0, и очень полезно семантически отличать его от целого числа 0.
Есть проблемы с использованием 0 (и, следовательно, NULL). Например:
void f(int); void f(void*); f(0); // Ambiguous. Calls f(int).
Следующая версия C ++ (C ++ 0x) включает
nullptr
исправление этого.f(nullptr); // Calls f(void*).
источник
((void *)0)
большинство реализаций стандартной библиотеки C.((void *)0)
неверен в C ++, потому чтоvoid*
не может быть приведен к другим типам указателей, как, например, в C. glibc,#define NULL 0
когда__cplusplus
он определен.NULL
не является встроенной частью основного языка C ++, но является частью стандартной библиотеки. Вам необходимо включить один из стандартных файлов заголовков, которые включают его определение.#include <cstddef>
или#include <stddef.h>
должно хватить.NULL
Если вы включитеcstddef
или, то определение будет доступноstddef.h
. Это не гарантируется, но вы, скорее всего, получите его определение, если вместо этого включите многие другие стандартные заголовки.источник
Вы включаете в этот файл "stdlib.h" или "cstdlib"? NULL определен в stdlib.h / cstdlib
#include <stdlib.h>
или
#include <cstdlib> // This is preferrable for c++
источник
Не используйте
NULL
, C ++ позволяет0
вместо этого использовать неприукрашенное :previous = 0; next = 0;
И, как и в C ++ 11, вам обычно не следует использовать ни
NULL
или,0
поскольку он предоставляет вамnullptr
типstd::nullptr_t
, который лучше подходит для данной задачи.источник