为什么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>
应该足够了。
如果包含cstddef
或stddef.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_t
types的nullptr
,这更适合于该任务。