Je reçois ce message lors de la compilation C++ sur gcc 4,3erreur: « NULL » n'a pas été déclaré dans ce cadre
error: ‘NULL’ was not declared in this scope
Il apparaît et disparaît et je ne sais pas pourquoi. Pourquoi?
Merci.
Je reçois ce message lors de la compilation C++ sur gcc 4,3erreur: « NULL » n'a pas été déclaré dans ce cadre
error: ‘NULL’ was not declared in this scope
Il apparaît et disparaît et je ne sais pas pourquoi. Pourquoi?
Merci.
NULL
n'est pas un mot-clé. C'est un identifiant défini dans certains en-têtes standard. Vous pouvez inclure
#include <cstddef>
de l'avoir portée, y compris d'autres bases, comme std::size_t
.
Dieu, je suis tellement gâté avec Java (null étant un mot-clé) que je n'ai jamais pensé que NULL ne serait pas un mot-clé en C++. Merci :) –
En fait ce n'est pas un mot-clé dans Java non plus. –
@ManofOneWay Non, il existe en Java, il est simplement épelé avec toutes les minuscules au lieu des majuscules. – Ataraxia
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
un fichier d'en-tête approprié, donc g ++ voit NULL
comme un nom de variable normal, et vous ne l'avez pas déclaré.
GCC prend des mesures vers 11 C++, ce qui est probablement la raison pour laquelle vous avez besoin maintenant d'inclure cstddef afin d'utiliser la NULL constante. 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 est pas implicitement convertible en types entiers, il peut donc être utilisé pour désambiguïser un appel à une fonction qui a été surchargé pour les deux types pointeur et intégrale:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
Mais encore C'est un comportement étrange! Même en compilant mon code avec -std = C++ 98, les images GCC ne reconnaissent pas la macro NULL et reconnaissent uniquement nullptr avec C++ 11 ou gnu ++ 11 comme argument pour -std. – pharaoh
La norme C++ a déjà déclaré en 1998 que NULL est défini dans cstddef - les nouvelles versions du compilateur suivent simplement la norme de manière plus stricte car elles doivent implémenter nullptr.Votre code (défectueux) a été compilé avec les versions antérieures de GCC, mais il serait difficile de rester rétrocompatible avec les versions précédentes de GCC, en plus des versions antérieures de C++. –
'NULL' n'a jamais été un mot-clé intégré; c'est une macro définie dans plusieurs en-têtes C standard, y compris '
Pour compléter les autres réponses: Si vous êtes en utilisant 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)
Vous pouvez déclarer la macro NULL. Ajoutez à cela après le vôtre #includes:
#define NULL 0
ou
#ifndef NULL
#define NULL 0
#endif
Non ";" au et des instrucions.
Peut-être que vous n'avez pas déclaré NULL dans la portée de l'origine du message? –
Vous devez au moins poster le code complet qui donne l'erreur. Sinon, il sera très difficile de dire ce qui se passe en regardant simplement la chaîne d'erreur. – Naveen