Ricevo questo messaggio durante la compilazione di C ++ su gcc 4.3
error: ‘NULL’ was not declared in this scope
Appare e scompare e non so perché. Perché?
Grazie.
Ricevo questo messaggio durante la compilazione di C ++ su gcc 4.3
error: ‘NULL’ was not declared in this scope
Appare e scompare e non so perché. Perché?
Grazie.
Risposte:
NULL
non è una parola chiave. È un identificatore definito in alcune intestazioni standard. Puoi includere
#include <cstddef>
Per averlo nel campo di applicazione, comprese alcune altre basi, come std::size_t
.
nullptr
parola chiave, che è una parola chiave effettiva e non richiede alcun #include
s. È anche più typesafe di NULL
.
GCC sta facendo passi verso C ++ 11, motivo per cui ora è necessario includere cstddef per utilizzare la costante NULL . Il modo preferito in C ++ 11 è usare la nuova parola chiave nullptr , implementata in GCC dalla versione 4.6. nullptr non è convertibile implicitamente in tipi integrali, quindi può essere utilizzato per disambiguare una chiamata a una funzione che è stata sovraccaricata sia per i tipi puntatore che per quelli integrali:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
non è mai stata una parola chiave incorporata; è una macro definita in diverse intestazioni C standard, tra cui <stddef.h>
(o <cstddef>
). In che modo gcc "intraprende passi verso C ++ 11" influisce su questo? Non vedo nulla nella domanda che implichi che il codice (invisibile) sia stato compilato con versioni precedenti di gcc / g ++ o con versioni precedenti dello standard del linguaggio.
NULL
non è una parola chiave; è una sostituzione macro per 0, e arriva stddef.h
o cstddef
, credo. Non hai #included
un file di intestazione appropriato, quindi g ++ vede NULL
come un nome di variabile regolare e non l'hai dichiarato.
Per completare le altre risposte: Se stai usando C ++ 11, usa nullptr
, che è una parola chiave che significa un puntatore void che punta a null. (invece di NULL
, che non è un tipo di puntatore)