Tengo un problema con este constructor de estructuras cuando intento compilar este código:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
cuando vengo se produce este error:
\linkedlist\linkedlist.h||In constructor `Node::Node(int)':|
\linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|
El último problema fue la estructura, pero funcionó bien cuando estaba en mi main.cpp, esta vez está en un archivo de encabezado y me está dando este problema. Estoy usando Code :: Blocks para compilar este código
<cstddef>
es la opción más limpia.Utilice NULL. De todos modos, está #definido como 0 y es muy útil distinguirlo semánticamente del entero 0.
Hay problemas con el uso de 0 (y por lo tanto NULL). Por ejemplo:
void f(int); void f(void*); f(0); // Ambiguous. Calls f(int).
La próxima versión de C ++ (C ++ 0x) incluye
nullptr
para solucionar este problema.f(nullptr); // Calls f(void*).
fuente
((void *)0)
por la mayoría de las implementaciones de bibliotecas estándar de C.((void *)0)
es incorrecto en C ++, porquevoid*
no es coercible a otros tipos de punteros como lo es en C. glibc, por ejemplo,#define NULL 0
cuando__cplusplus
se define.NULL
no es una parte nativa del lenguaje central C ++, pero es parte de la biblioteca estándar. Debe incluir uno de los archivos de encabezado estándar que incluyen su definición.#include <cstddef>
o#include <stddef.h>
debería ser suficiente.Se
NULL
garantiza que la definición de estará disponible si incluyecstddef
ostddef.h
. No está garantizado, pero es muy probable que incluya su definición si incluye muchos de los otros encabezados estándar.fuente
¿Está incluyendo "stdlib.h" o "cstdlib" en este archivo? NULL está definido en stdlib.h / cstdlib
#include <stdlib.h>
o
#include <cstdlib> // This is preferrable for c++
fuente
No lo use
NULL
, C ++ le permite usar lo sin adornos en su0
lugar:previous = 0; next = 0;
Y, al igual que en C ++ 11, por lo general no debería utilizar ni
NULL
o,0
ya que le proporciona unnullptr
tipostd::nullptr_t
, que se adapta mejor a la tarea.fuente