Recebo esta mensagem ao compilar C ++ no gcc 4.3
error: ‘NULL’ was not declared in this scope
Aparece e desaparece e não sei por quê. Por quê?
Obrigado.
Recebo esta mensagem ao compilar C ++ no gcc 4.3
error: ‘NULL’ was not declared in this scope
Aparece e desaparece e não sei por quê. Por quê?
Obrigado.
Respostas:
NULL
não é uma palavra-chave. É um identificador definido em alguns cabeçalhos padrão. Você pode incluir
#include <cstddef>
Tê-lo no escopo, incluindo alguns outros princípios básicos, como std::size_t
.
nullptr
palavra - chave, que é uma palavra-chave real e não requer nenhum #include
s. Também é mais seguro do que NULL
.
O GCC está tomando medidas em direção ao C ++ 11, provavelmente o motivo pelo qual agora você precisa incluir o cstddef para usar a constante NULL . A maneira preferida no C ++ 11 é usar a nova palavra-chave nullptr , que é implementada no GCC desde a versão 4.6. nullptr não é implicitamente convertível em tipos integrais, portanto, pode ser usado para desambiguar uma chamada para uma função que foi sobrecarregada para os tipos ponteiro e integral:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
nunca foi uma palavra-chave incorporada; é uma macro definida em vários cabeçalhos C padrão, incluindo <stddef.h>
(ou <cstddef>
). Como o gcc "dar passos em direção ao C ++ 11" afeta isso? Não vejo nada na pergunta que implique que o código (invisível) seja compilado com versões anteriores do gcc / g ++ ou com versões anteriores do padrão da linguagem.
NULL
não é uma palavra-chave; é uma substituição macro para 0 e entra stddef.h
ou cstddef
, acredito. Você não possui #included
um arquivo de cabeçalho apropriado; portanto, o g ++ vê NULL
como um nome de variável regular e não o declarou.
Para concluir as outras respostas: Se você estiver usando o C ++ 11, use nullptr
, que é uma palavra-chave que significa um ponteiro nulo apontando para nulo. (em vez de NULL
, que não é um tipo de ponteiro)