Recibo este mensaje al compilar C ++ en gcc 4.3
error: ‘NULL’ was not declared in this scope
Aparece y desaparece y no sé por qué. ¿Por qué?
Gracias.
Recibo este mensaje al compilar C ++ en gcc 4.3
error: ‘NULL’ was not declared in this scope
Aparece y desaparece y no sé por qué. ¿Por qué?
Gracias.
Respuestas:
NULLno es una palabra clave. Es un identificador definido en algunos encabezados estándar. Puedes incluir
#include <cstddef>
Para tenerlo en alcance, incluidos algunos otros conceptos básicos, como std::size_t.
nullptrpalabra clave, que es una palabra clave real y no requiere ninguna #includes. También es más seguro para tipos que NULL.
GCC está dando pasos hacia C ++ 11, que probablemente sea la razón por la que ahora necesita incluir cstddef para usar la constante NULL . La forma preferida en C ++ 11 es usar la nueva palabra clave nullptr , que se implementa en GCC desde la versión 4.6. nullptr no se puede convertir implícitamente en tipos integrales, por lo que se puede usar para eliminar la ambigüedad de una llamada a una función que se ha sobrecargado tanto para los tipos de puntero como para los integrales:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULLnunca ha sido una palabra clave incorporada; es una macro definida en varios encabezados C estándar, incluidos <stddef.h>(o <cstddef>). ¿Cómo afecta esto gcc "dar pasos hacia C ++ 11"? No veo nada en la pregunta que implique que el código (no visto) compilado con versiones anteriores de gcc / g ++, o con versiones anteriores del estándar de lenguaje.
NULLno es una palabra clave; es una macro sustitución de 0, y entra stddef.ho cstddef, creo. No tiene #includedun archivo de encabezado apropiado, por lo que g ++ lo ve NULLcomo un nombre de variable regular y no lo ha declarado.
Para completar las otras respuestas: Si está usando C ++ 11, use nullptr, que es una palabra clave que significa un puntero vacío que apunta a nulo. (en lugar de NULL, que no es un tipo de puntero)