Error: "NULL не был объявлен в этой области

Я получаю это сообщение при компиляции С++ на gcc 4.3

error: ‘NULL’ was not declared in this scope

Он появляется и исчезает, и я не знаю, почему. Почему?

Спасибо.

Ответ 1

NULL не является ключевым словом. Это идентификатор, определенный в некоторых стандартных заголовках. Вы можете включить

#include <cstddef>

Чтобы иметь его в области видимости, включая некоторые другие основы, например std::size_t.

Ответ 2

GCC предпринимает шаги к С++ 11, поэтому, вероятно, вам нужно включить cstddef для использования константы NULL. Предпочтительным способом в С++ 11 является использование нового ключевого слова nullptr, которое реализовано в GCC с версии 4.6. nullptr неявно конвертируется в интегральные типы, поэтому его можно использовать для устранения неоднозначности вызова функции, которая была перегружена как для указателя, так и для интегральных типов:

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

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

Ответ 3

NULL не является ключевым словом; это макроподстановка для 0 и, кажется, входит в stddef.h или cstddef. У вас нет #included соответствующего заголовочного файла, поэтому g++ видит NULL в качестве обычного имени переменной, и вы еще не объявили его.

Ответ 4

Чтобы выполнить другие ответы: Если вы используете С++ 11, используйте nullptr, который является ключевым словом, которое означает указатель на void, указывающий на null. (вместо NULL, который не является типом указателя)