J'ai un problème avec ce struct struct lorsque je tente de compiler ce code:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
quand je viens cette erreur se produit:
\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 ===|
Le dernier problème était la structure, mais cela fonctionnait bien quand il était dans mon main.cpp, cette fois-ci dans un fichier d’en-tête et me pose ce problème. J'utilise Code :: Blocks pour compiler ce code
NULL
n'est pas une constante intégrée dans les langages C ou C++. En fait, en C++, il est plus ou moins obsolète, utilisez simplement un littéral simple 0
au lieu de cela, le compilateur fera le bon choix en fonction du contexte.
Dans les nouvelles versions de C++ (C++ 11 et supérieures), utilisez nullptr
(comme indiqué dans un commentaire, merci).
Sinon, ajoutez
#include <stddef.h>
pour obtenir la définition de NULL
.
Utilisez NULL. De toute façon, il est juste # défini à 0 et il est très utile de le distinguer sémantiquement de l'entier 0.
L'utilisation de 0 (et donc de NULL) pose des problèmes. Par exemple:
void f(int);
void f(void*);
f(0); // Ambiguous. Calls f(int).
La prochaine version de C++ (C++ 0x) inclut nullptr
pour résoudre ce problème.
f(nullptr); // Calls f(void*).
NULL
ne fait pas partie du langage C++ principal, mais fait partie de la bibliothèque standard. Vous devez inclure l'un des fichiers d'en-tête standard qui incluent sa définition. #include <cstddef>
ou #include <stddef.h>
devrait suffire.
La définition de NULL
est assurée si vous incluez cstddef
ou stddef.h
. Ce n'est pas garanti, mais vous aurez très probablement sa définition incluse si vous incluez beaucoup d'autres en-têtes standard.
Incluez-vous "stdlib.h" ou "cstdlib" dans ce fichier? NULL est défini dans stdlib.h/cstdlib
#include <stdlib.h>
ou
#include <cstdlib> // This is preferrable for c++
N'utilisez pas NULL
, C++ vous permet d'utiliser le 0
Sans fioritures:
previous = 0;
next = 0;
Et, comme en C++ 11, vous ne devriez généralement pas utiliser NULL
o0
Car il vous fournit nullptr
de type std::nullptr_t
, Qui convient mieux à la tâche.