web-dev-qa-db-fra.com

erreur: "NULL" n'a pas été déclaré dans cette étendue

Je reçois ce message lors de la compilation de C++ sur gcc 4.3

error: ‘NULL’ was not declared in this scope

Il apparaît et disparaît et je ne sais pas pourquoi. Pourquoi?

Merci.

112
jackhab

NULL n'est pas un mot clé. C'est un identifiant défini dans certains en-têtes standard. Vous pouvez inclure 

#include <cstddef>

Pour l’avoir dans la portée, y compris quelques autres bases, comme std::size_t.

168

GCC est en train de prendre des mesures en direction de C++ 11, ce qui explique probablement pourquoi vous devez maintenant inclure cstddef pour pouvoir utiliser la constanteNULLconstante. La méthode préférée dans C++ 11 consiste à utiliser le nouveau mot clé nullptr , implémenté dans GCC depuis la version 4.6. nullptr n'est pas implicitement convertible en types intégraux. Il peut donc être utilisé pour désambiguïser un appel à une fonction qui a été surchargée pour les types pointeur et type intégral:

void f(int x);
void f(void * ptr);

f(0);  // Passes int 0.
f(nullptr);  // Passes void * 0.
34
Seppo Enarvi

NULL n'est pas un mot clé; c'est une substitution de macro pour 0, et vient en stddef.h ou cstddef, je crois. Vous n'avez pas #included de fichier d'en-tête approprié, g ++ considère donc NULL comme un nom de variable normal et vous ne l'avez pas déclaré.

10
David Thornley

Pour compléter les autres réponses: Si vous utilisez C++ 11, utilisez nullptr, qui est un mot clé qui signifie un pointeur vide, pointant vers null. (au lieu de NULL, qui n'est pas un type de pointeur)

4
Leonardo Raele

NULL peut également être trouvé dans: 

#include <string.h>

String.h extraira la valeur NULL ailleurs.

0
Owl

Vous pouvez déclarer la macro NULL. Ajoutez cela après votre # comprend:

#define NULL 0

ou

#ifndef NULL
#define NULL 0
#endif

Non ";" à la fin des instructions ...

0
Derzu