Ostrzeżenie kompilatora (poziom 4) C4456
deklaracja "identifier" ukrywa poprzednią deklarację lokalną
Deklaracja identyfikatora w zakresie lokalnym ukrywa deklarację poprzedniej deklaracji lokalnej o tej samej nazwie. To ostrzeżenie informuje o tym, że odwołania do identyfikatora w zakresie lokalnym rozpoznają lokalnie zadeklarowaną wersję, a nie poprzednią lokalną, która może lub nie jest twoim zamiarem. Aby rozwiązać ten problem, zalecamy nadanie nazw zmiennych lokalnych, które nie powodują konfliktu z innymi nazwami lokalnymi.
Przykład
Poniższy przykład generuje C4456, ponieważ zmienna int x
sterowania pętli i zmienna double x
lokalna w programie member_fn
mają takie same nazwy. Aby rozwiązać ten problem, użyj różnych nazw zmiennych lokalnych.
// 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;