错误:此范围内未声明“NULL”

时间:2009-01-20 17:05:40

标签: c++ gcc pointers null

我在gcc 4.3上编译C ++时收到此消息

error: ‘NULL’ was not declared in this scope

它出现并消失,我不知道为什么。为什么呢?

感谢。

7 个答案:

答案 0 :(得分:171)

NULL不是关键字。它是一些标准头文件中定义的标识符。你可以包括

#include <cstddef>

将其纳入范围,包括其他一些基础知识,例如std::size_t

答案 1 :(得分:37)

GCC正在采取措施来实现C ++ 11,这可能就是为什么你现在需要包含 cstddef 才能使用 NULL 常量。 C ++ 11中的首选方法是使用新的 nullptr 关键字,该关键字从版本4.6开始在GCC中实现。 nullptr 不可隐式转换为整数类型,因此它可用于消除对已为指针和整数类型重载的函数的调用的歧义:

void f(int x);
void f(void * ptr);

f(0);  // Passes int 0.
f(nullptr);  // Passes void * 0.

答案 2 :(得分:10)

NULL不是关键字;它是一个宏替换0,我相信stddef.hcstddef。你没有#included一个合适的头文件,所以g ++认为NULL是一个常规变量名,你还没有声明它。

答案 3 :(得分:5)

要完成其他答案:如果您使用的是C ++ 11,请使用nullptr,这是一个关键字,表示指向null的void指针。 (而不是NULL,这不是指针类型)

答案 4 :(得分:0)

您可以将宏声明为NULL。在#includes后添加:

#define NULL 0

#ifndef NULL
#define NULL 0
#endif

否&#34;;&#34;在说明的最后......

答案 5 :(得分:0)

NULL也可以在以下位置找到:

#include <string.h>

String.h将从其他地方提取NULL。

答案 6 :(得分:0)

如果您仔细查看任何 std 标头中的 NULL 宏:

<块引用>

#define NULL __null

所以基本上,您可以改用 col1 col2 a b c d e f 0 [a, b, f] [c, d, e] 1.0 1.0 0.0 0.0 0.0 1.0 1 [c, d] [a, b, e, f] 0.0 0.0 1.0 1.0 0.0 0.0 2 [a] [b, c, d, e, f] 1.0 0.0 0.0 0.0 0.0 0.0 关键字。