当前位置:  开发笔记 > 编程语言 > 正文

错误:此范围内未声明"NULL"

如何解决《错误:此范围内未声明"NULL"》经验,为你挑选了4个好方法。

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

error: ‘NULL’ was not declared in this scope

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

谢谢.



1> Johannes Sch..:

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

#include 

把它放在范围内,包括其他一些基础知识,比如std::size_t.


实际上它也不是Java中的关键字.
@ZettaSuro我没有说它不存在.我只是说它不是关键字.
既然编译器更普遍地支持C++ 11,那么值得一提的是`nullptr`关键字,它是一个实际的关键字,不需要任何`#include`s.它比`NULL`更安全.
@ManofOneWay不,它存在于Java中,它只是拼写全部小写而不是大写.

2> Seppo Enarvi..:

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.


C++标准已于1998年声明,在cstddef中定义了NULL - 新的编译器版本更严格地遵循标准,因为它们需要实现nullptr.您的(错误的)代码已经使用早期的GCC版本编译,但除了早期的C++标准版本之外,很难与早期的GCC版本保持向后兼容.

3> David Thornl..:

NULL不是关键字; 它是一个宏的替代0,并且,stddef.h或者cstddef,我相信.你没有#included一个合适的头文件,所以g ++看作NULL是一个常规变量名,你还没有声明它.



4> Leonardo Rae..:

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有