Udostępnij za pośrednictwem


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;