| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
Имхо, потому, что я вряд ли хотел такое поведение, скорее я хотел объявить одно поле, но по ошибке объявил его дважды в двух местах. Ну и по свежим следам - после 2-х дней отладки бага, почему в конструкторе родителя я присваиваю полю значение, а в методе производного класса пытаюсь обращаться к этому полю, а оно содержит какую-то гукню, я бы очень хотел такой warning. Даже не по-дефолту и даже не в -Wall, а отдельным -W<...>, но хотелось бы. |
| Автор: MAKCim 19.10.2007, 19:46 |
| JackYF, тогда смотри в мане все -W* если не найдешь, значит нет |
| Автор: JackYF 19.10.2007, 20:12 |
та вот смотрел, не нашёл. Поэтому и запостил вопрос. |
| Автор: bsa 24.10.2007, 11:38 |
| JackYF, имхо, просто неверно инициализировать переменные базового класса из потомка. Уж лучше сеттером или конструктором базового класса это делать. А на счет варнинга - вряд ли найдешь. Это не только не нарушение, это вполне легитимное действие. Сам подумай, если базовый класс содержит в приватной зоне переменную X, а ты в производном 3-го порядка решил ввести тоже переменную X, то тебя компилятор поругает. И в итоге, у тебя при сборке будет куча совершенно бессмысленных варнингов в каждом месте включения хидера производного класса. Тебе оно надо? Приведу аналогию: никто не запрещает пользоваться оператором goto, но почему-то никто без серьезной причины его не использует. Почему? А потому, что это затрудняет понимание кода. Но когда ты его использовал и у тебя начались глюки (из-за, допустим, полной потери читабельности кода) ты же не просишь, чтобы компилятор ругался на, допустим, переход за оператор new? |