J'ai un problème avec ce constructeur de structure lorsque j'essaye 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 c'était dans mon main.cpp, cette fois, c'est dans un fichier d'en-tête et me pose ce problème. J'utilise Code :: Blocks pour compiler ce code
<cstddef>
est l'option la plus propre.Utilisez NULL. Il est juste # défini comme 0 de toute façon et il est très utile de le distinguer sémantiquement de l'entier 0.
Il y a des problèmes avec l'utilisation de 0 (et donc NULL). Par exemple:
void f(int); void f(void*); f(0); // Ambiguous. Calls f(int).
La prochaine version de C ++ (C ++ 0x) comprend
nullptr
pour résoudre ce problème.f(nullptr); // Calls f(void*).
la source
((void *)0)
par la plupart des implémentations de bibliothèques standard C.((void *)0)
est incorrect en C ++, car ilvoid*
n'est pas coercible à d'autres types de pointeurs comme dans C. glibc, par exemple,#define NULL 0
quand__cplusplus
est défini.NULL
n'est pas une partie native du langage C ++ de base, mais elle 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 être suffisant.La définition de
NULL
est garantie disponible si vous incluezcstddef
oustddef.h
. Ce n'est pas garanti, mais vous obtiendrez très probablement sa définition si vous incluez à la place de nombreux autres en-têtes standard.la source
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++
la source
Ne pas utiliser
NULL
, C ++ vous permet d'utiliser le sans ornement à la0
place:previous = 0; next = 0;
Et, comme en C ++ 11, vous ne devriez généralement pas utiliser l'un
NULL
ou l' autre ou0
puisqu'il vous fournit unnullptr
typestd::nullptr_t
, qui est mieux adapté à la tâche.la source