me sale este mensaje al compilar C++ en GCC 4,3de error: ‘NULL’ no estaba declarado en este ámbito
error: ‘NULL’ was not declared in this scope
Aparece y desaparece y no sé qué. ¿Por qué?
Gracias.
me sale este mensaje al compilar C++ en GCC 4,3de error: ‘NULL’ no estaba declarado en este ámbito
error: ‘NULL’ was not declared in this scope
Aparece y desaparece y no sé qué. ¿Por qué?
Gracias.
NULL
no es una palabra clave. Es un identificador definido en algunos encabezados estándar. Puede incluir
#include <cstddef>
tenerlo en su alcance, incluyendo algunos otros productos básicos, como std::size_t
.
Dios, estoy tan mimado con Java (una palabra clave nula) que nunca pensé que NULL no sería una palabra clave en C++. Gracias :) –
En realidad tampoco es una palabra clave en Java. –
@ManofOneWay No, existe en Java, simplemente se escribe con todas las minúsculas en lugar de mayúsculas. – Ataraxia
NULL
no es una palabra clave; es una sustitución macro para 0, y viene en stddef.h
o cstddef
, creo. No tiene #included
un archivo de encabezado apropiado, por lo que g ++ ve NULL
como un nombre de variable regular y no lo ha declarado.
GCC está adoptando medidas para C++ 11, que es probablemente la razón por ahora tiene que incluir cstddef con el fin de utilizar el NULL constante. La forma preferida en C++ 11 es utilizar la nueva palabra clave nullptr, que se implementa en GCC desde la versión 4.6. nullptr no es convertir implícitamente a tipos enteros, por lo que se puede utilizar para eliminar la ambigüedad de una llamada a una función que ha sido sobrecargado por tanto puntero y tipos integrales:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
Pero aún así es un comportamiento extraño! Incluso al compilar mi código con -std = C++ 98 las imágenes GCC no reconocen la macro NULL, y solo reconoce nullptr con C++ 11 o gnu ++ 11 como argumento para -std. – pharaoh
El estándar C++ ya estableció en 1998 que NULL está definido en cstddef: las nuevas versiones de compiladores simplemente siguen el estándar más estrictamente porque necesitan implementar nullptr.Su código (defectuoso) se compiló con versiones anteriores de GCC, pero sería difícil mantenerse compatible con las versiones anteriores de GCC, además de versiones anteriores de C++ estándar. –
'NULL' nunca ha sido una palabra clave incorporada; es una macro definida en varios encabezados C estándar, incluido '
Para completar las otras respuestas: Si está usando C++ 11, use nullptr
, que es una palabra clave que significa un puntero de vacío apuntando a nulo. (en lugar de NULL
, que no es un tipo de puntero)
Puede declarar la macro NULL. Añadir que después de la suya # incluye:
#define NULL 0
o
#ifndef NULL
#define NULL 0
#endif
No ";" en el y de las instruciones.
¿Quizás no ha declarado NULL en el ámbito de donde proviene el mensaje? –
Al menos debe publicar la pieza completa de código que está dando el error. De lo contrario, será muy difícil saber qué está pasando con solo mirar la cadena de error. – Naveen