在 gcc 4.3 上编译 C++ 时收到此消息
error: ‘NULL’ was not declared in this scope
它出现又消失,我不知道为什么。为什么?
谢谢。
NULL
不是关键字。它是一些标准头文件中定义的标识符。你可以包括
#include <cstddef>
将其纳入范围,包括其他一些基础知识,例如std::size_t
.
GCC 正在向 C++11 迈进,这可能就是您现在需要包含cstddef以使用NULL常量的原因。C++11 中的首选方法是使用新的nullptr关键字,该关键字在 GCC 4.6 版本中实现。nullptr不能隐式转换为整数类型,因此它可用于消除对指针和整数类型都已重载的函数的调用的歧义:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
不是关键字;它是 0 的宏替换,我相信它是stddef.h
or 。cstddef
您没有#included
合适的头文件,因此 g++ 将NULL
其视为常规变量名,并且您尚未声明它。
要完成其他答案:如果您使用的是 C++11,请使用nullptr
,这是一个关键字,表示指向 null 的 void 指针。(而不是NULL
, 这不是指针类型)
您可以将宏声明为 NULL。在你的#includes 之后添加:
#define NULL 0
或者
#ifndef NULL
#define NULL 0
#endif
不 ”;” 在说明的最后......
NULL 也可以在以下位置找到:
#include <string.h>
String.h 将从其他地方拉入 NULL。
如果您仔细查看任何 std 标头中的 NULL 宏:
#define NULL __null
所以基本上,你可以改用__null
关键字。