Пример
В этом примере заданы два объявления переменной с одним и тем же именем. Это нехорошо и может ввести в заблуждение разработчиков.

class ClassA {
public:
int someFunction() {
struct Hat {
int sameName;
};

Hat myHat;
myHat.sameName = 5;

int sameName = 5;

return sameName;
}
};

Решение
Назовите вторую переменную по-другому, так чтобы было ясно, над какой переменной выполняются действия. Рекомендуется выбирать осмысленные имена переменных.

class ClassA {
public:
int someFunction() {
struct Hat {
int sameName;
};

Hat myHat;
myHat.sameName = 5;

int banana = 5;

return banana;
}
};