Error: “ NULL”未在此范围中声明

我在 gcc 4.3上编译 C + + 时得到了这个消息

error: ‘NULL’ was not declared in this scope

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

谢谢。

182905 次浏览

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

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

#include <cstddef>

在范围内使用它,包括一些其他的基础知识,如 std::size_t

GCC 正在向 C + + 11迈进,这可能就是为什么您现在需要包含 Cstddef以便使用 无效常量的原因。C + + 11中的首选方法是使用新的 无效关键字,自4.6版以来,这个关键字在 GCC 中实现。无效不能隐式地转换为整数类型,因此它可以用来消除对指针和整数类型都重载的函数的调用的歧义:

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


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

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

您可以声明宏为 NULL。在您的 # include 后面添加:

#define NULL 0

或者

#ifndef NULL
#define NULL 0
#endif

在说明书的最后。

NULL 也可以在:

#include <string.h>

H 将从其他地方引入 NULL。

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

# Definition NULL _ _ NULL

因此,基本上,您可以使用 __null关键字代替。

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

#include <iostream>