2009-01-20 46 views
101

没有宣布GCC 4.3错误:“NULL”在此范围

error: ‘NULL’ was not declared in this scope 

它出现和消失编译C++时,我得到这个消息,我不知道为什么。为什么?

谢谢。

+2

也许你没有在消息的来源范围内声明NULL? – 2009-01-20 17:08:33

+1

您应该至少发布提供错误的完整代码。否则,通过查看错误字符串将很难分辨出发生了什么。 – Naveen 2009-01-20 17:11:44

回答

160

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

#include <cstddef> 

有它的适用范围,包括一些其他的基本知识,如std::size_t

+0

上帝,我非常宠坏Java(null是一个关键字),我从来没有想过NULL不会是C++中的关键字。感谢:) – 2011-10-04 19:45:28

10

NULL不是关键字;这是一个0的宏替代,我相信stddef.hcstddef。您没有#included适当的头文件,因此g ++将NULL视为常规变量名称,并且您尚未声明它。

32

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. 
4

要完成其他答案:如果你是使用C++ 11,使用nullptr,这是一个关键字,意味着一个空指针指向null。 (而不是NULL,这不是指针类型)

0

您可以声明宏NULL。添加后您的#includes:

#define NULL 0 

#ifndef NULL 
#define NULL 0 
#endif 

否 “;”在教学和指导。