Avviso del compilatore (livello 4) C4456
la dichiarazione di 'identifier' nasconde la dichiarazione locale precedente
La dichiarazione di identificatore nell'ambito locale nasconde la dichiarazione della dichiarazione locale precedente con lo stesso nome. Questo avviso consente di sapere che i riferimenti all'identificatore nell'ambito locale vengono risolti nella versione dichiarata in locale, non nella versione locale precedente, che può essere o meno la finalità. Per risolvere questo problema, è consigliabile assegnare nomi di variabili locali che non sono in conflitto con altri nomi locali.
Esempio
L'esempio seguente genera l'errore C4456 perché la variabile int x
di controllo del ciclo e la variabile double x
locale in member_fn
hanno gli stessi nomi. Per risolvere questo problema, usare nomi diversi per le variabili locali.
// 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;