128

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

error: ‘NULL’ was not declared in this scope

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

谢谢。

4

7 回答 7

184

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

#include <cstddef>

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

于 2009-01-20T17:14:34.367 回答
39

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.
于 2011-11-30T14:16:45.270 回答
10

NULL不是关键字;它是 0 的宏替换,我相信它是stddef.hor 。cstddef您没有#included合适的头文件,因此 g++ 将NULL其视为常规变量名,并且您尚未声明它。

于 2009-01-20T17:13:58.330 回答
5

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

于 2013-09-23T17:43:39.063 回答
0

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

#define NULL 0

或者

#ifndef NULL
#define NULL 0
#endif

不 ”;” 在说明的最后......

于 2018-01-10T19:28:09.723 回答
0

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

#include <string.h>

String.h 将从其他地方拉入 NULL。

于 2018-09-14T09:28:42.190 回答
0

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

#define NULL __null

所以基本上,你可以改用__null关键字。

于 2021-06-07T10:53:13.457 回答