ошибка: «NULL» не был объявлен в этой области - PullRequest
115 голосов
/ 20 января 2009

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

error: ‘NULL’ was not declared in this scope

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

Спасибо.

Ответы [ 6 ]

171 голосов
/ 20 января 2009

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

#include <cstddef>

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

37 голосов
/ 30 ноября 2011

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.
10 голосов
/ 20 января 2009

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

5 голосов
/ 23 сентября 2013

Для завершения других ответов: Если вы используете C ++ 11, используйте nullptr, которое является ключевым словом, которое означает пустой указатель, указывающий на ноль. (вместо NULL, который не является типом указателя)

0 голосов
/ 14 сентября 2018

NULL также можно найти в:

#include <string.h>

String.h извлечет NULL откуда-то еще.

0 голосов
/ 10 января 2018

Вы можете объявить макрос NULL. Добавьте это после #includes:

#define NULL 0

или

#ifndef NULL
#define NULL 0
#endif

Нет ";" в конце инструкции ...

...