Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
declaração de «identificador» oculta declaração global
Observações
A declaração de identificador no escopo local oculta a declaração do identificador de nome idêntico no escopo global. Este aviso informa que as referências ao identificador neste escopo resolvem-se para a versão declarada localmente, não para a versão global, o que pode não corresponder à sua intenção. Geralmente, recomendamos que você minimize o uso de variáveis globais como uma boa prática de engenharia. Para minimizar a poluição do namespace global, recomendamos o uso de um namespace nomeado para variáveis globais.
Este aviso era novo no Visual Studio 2015, no compilador Microsoft C++ versão 18.00. Para suprimir avisos dessa versão do compilador ou posterior durante a migração do código, use a opção de compilador /Wv:18 .
Example
O exemplo a seguir gera C4459:
// C4459_hide.cpp
// compile with: cl /W4 /EHsc C4459_hide.cpp
int global_or_local = 1;
int main() {
int global_or_local; // warning C4459
global_or_local = 2;
}
Uma maneira de corrigir este problema é criar um namespace para as suas variáveis globais, mas não usar uma diretiva using para trazer esse namespace para o escopo; portanto, todas as referências devem utilizar nomes qualificados e inequívocos.
// C4459_namespace.cpp
// compile with: cl /W4 /EHsc C4459_namespace.cpp
namespace globals {
int global_or_local = 1;
}
int main() {
int global_or_local; // OK
global_or_local = 2;
globals::global_or_local = 3;
}