为什么NULL未声明?

当我尝试编译这段代码时,我遇到了这个struct构造器的问题:

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来编译此代码

NULL不是C或C ++语言中的内置常量。 事实上,在C ++中,它或多或less已经过时,只要使用一个纯文本0 ,编译器将根据上下文做正确的事情。

在较新的C ++(C ++ 11及更高版本)中,使用nullptr (正如在评论中指出的,谢谢)。

否则,添加

#include < stddef.h >

获得NULL定义。

请使用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*). 

NULL不是核心C ++语言的本地部分,但它是标准库的一部分。 您需要包含一个包含其定义的标准头文件。 #include <cstddef>#include <stddef.h>应该足够了。

如果包含cstddefstddef.h ,则NULL的定义保证可用。 这是不能保证的,但是如果你包含许多其他的标准头文件,你很可能会得到它的定义。

你在这个文件中包含“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因为它提供了std::nullptr_ttypes的nullptr ,这更适合于该任务。