Это не помечается как ошибка, потому что это не ошибка. Ничто не говорит о том, что в производном классе нельзя иметь членов, имена которых совпадают с именами в базовом классе.
Если у вас есть объект obj
типа Derived
, то obj.m_Pants
относится к m_Pants
в Derived
. Если вы хотите обратиться к базовому члену, вы можете сделать это, используя obj.Base::m_Pants
.
Если вы находитесь в функции-члене Base
или у вас есть Base*
, который указывает на объект типа Derived
, тогда m_Pants
всегда ссылается на член Base
, потому что в этих контекстах нет знаний о классе Derived
и его членах.
Ну, это не ошибка кода; это почти наверняка ошибка проектирования.