Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > [g++] сгенерировать warning...


Автор: JackYF 19.10.2007, 17:06
... если в производном и базовом классах объявлены переменные с одинаковыми именами.

-Wredundant-decls, -Wshadow, -Wextra, -Wall - не генерят, gcc 4.1.1.

Автор: MAKCim 19.10.2007, 19:21
JackYF, 
а почему должен быть Warning?
без оператора :: в методах производного класса будет использоваться поле этого класса, с оператором - поле базового

Автор: JackYF 19.10.2007, 19:41
Цитата(MAKCim @  19.10.2007,  19:21 Найти цитируемый пост)
а почему должен быть Warning?

Имхо, потому, что я вряд ли хотел такое поведение, скорее я хотел объявить одно поле, но по ошибке объявил его дважды в двух местах.

Ну и по свежим следам - после 2-х дней отладки бага, почему в конструкторе родителя я присваиваю полю значение, а в методе производного класса пытаюсь обращаться к этому полю, а оно содержит какую-то гукню, я бы очень хотел такой warning.
Даже не по-дефолту и даже не в -Wall, а отдельным -W<...>, но хотелось бы.

Автор: MAKCim 19.10.2007, 19:46
JackYF, 
тогда смотри в мане все -W*
если не найдешь, значит нет  smile 

Автор: JackYF 19.10.2007, 20:12
Цитата(MAKCim @  19.10.2007,  19:46 Найти цитируемый пост)
тогда смотри в мане все -W*

та вот смотрел, не нашёл. Поэтому и запостил вопрос.

Автор: bsa 24.10.2007, 11:38
JackYF, имхо, просто неверно инициализировать переменные базового класса из потомка. Уж лучше сеттером или конструктором базового класса это делать.
А на счет варнинга - вряд ли найдешь. Это не только не нарушение, это вполне легитимное действие. Сам подумай, если базовый класс содержит в приватной зоне переменную X, а ты в производном 3-го порядка решил ввести тоже переменную X, то тебя компилятор поругает. И в итоге, у тебя при сборке будет куча совершенно бессмысленных варнингов в каждом месте включения хидера производного класса. Тебе оно надо?
Приведу аналогию: никто не запрещает пользоваться оператором goto, но почему-то никто без серьезной причины его не использует. Почему? А потому, что это затрудняет понимание кода. Но когда ты его использовал и у тебя начались глюки (из-за, допустим, полной потери читабельности кода) ты же не просишь, чтобы компилятор ругался на, допустим, переход за оператор new?

Автор: JackYF 24.10.2007, 16:34
Цитата(bsa @  24.10.2007,  11:38 Найти цитируемый пост)
имхо, просто неверно инициализировать переменные базового класса из потомка.

я не инициализирую переменные базового класса из потомка.

А по теме - я с твоими доводами согласен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)