Aviso do compilador (nível 4) C4456
a declaração de 'identifier' oculta uma declaração local anterior
A declaração de identifier no escopo local oculta a declaração da declaração local anterior de mesmo nome. Este aviso permite que você saiba que as referências a identifier no escopo local resolvem para a versão declarada localmente, não o local anterior, que pode ou não ser a sua intenção. Para corrigir esse problema, recomendamos que você forneça nomes de variáveis locais que não entram em conflito com outros nomes locais.
Exemplo
O exemplo a seguir gera o aviso C4456 porque a variável de controle de loop int x
e a variável local double x
em member_fn
têm os mesmos nomes. Para corrigir esse problema, use nomes diferentes para as variáveis locais.
// C4456_hide.cpp
// compile with: cl /W4 /c C4456_hide.cpp
struct S {
void member_fn(unsigned u) {
double x = 0;
for (int x = 0; x < 10; ++x) { // C4456
u += x; // uses local int x
}
x += u; // uses local double x
}
} s;