Название: Виртуальные деструкторы Отправлено: Steven_Orko от Июнь 27, 2006, 21:38 Проясните, плиз, кто пользуется Линуксом и версией Qt 3.x.x. При разработке программ на указанной платформе компилятор мне сыпет варнинги по поводу того, что в некоторых классах Qt имеются виртуальные функции, но деструктор не объявлен виртуальным. Не надо меня посылать курить стандарт, что типа, если предок имеет виртуальный деструктор, то и все его потомки тоже. Дело как раз в том, что многие классы имеют предка с невиртуальным деструктором. Щас могу сказать точно про класс QSqlDatabase. Это все я смотрел в исходниках.
Теперь вопрос. Это у меня одного так или нет? Это вообще нормальная ситуация? Стоит ли править headers или просто надо отключить именно эти предупреждения (а их очень) много, т.к. проекты большие)? Как, кто знает? Название: Виртуальные деструкторы Отправлено: Grigory от Июнь 28, 2006, 09:33 такая ситуация возникает с gcc 4.x Там они это сделали варнингом, что в общем, правильно. Можешь юзать gcc 3.x, варнингов не будет, ну, или переписать проект с использованием qt4 ;) А вообще можно указать компилятору уровень выводимых предупреждений.
Название: Виртуальные деструкторы Отправлено: Steven_Orko от Июнь 28, 2006, 19:52 Было бы хорошо, если переписать проект на 4ую серию, только нельзя это. Военные меня не проймут.
Цитата: "Grigory" А вообще можно указать компилятору уровень выводимых предупреждений. Конкретно про эти варнинги можешь сказать, как их отключить? Название: Виртуальные деструкторы Отправлено: Admin от Июнь 28, 2006, 21:27 gcc -Wall -W - так выводит все варнинги
man gcc - искать по этим ключам Название: Виртуальные деструкторы Отправлено: QCasper от Июнь 28, 2006, 23:46 Цитата: "Grigory" или переписать проект с использованием qt4 ;) фигня, в четверке гцц тоже выдает такой варнинг, а вот msvc не выдает :) Название: Виртуальные деструкторы Отправлено: Grigory от Июнь 29, 2006, 09:51 по gcc4 не могу сказать сейчас ничего, т.к он у меня на домашней машине, но в gcc3 есть такой ключик:
Код: -Wnon-virtual-dtor (C++ only) попробуй gcc -Wno-non-virtual-dtor проверить как работает сейчас не могу, к сожалению. добавлено спустя 7 минут: Цитата: "QCasper" Цитата: "Grigory" или переписать проект с использованием qt4 ;) фигня, в четверке гцц тоже выдает такой варнинг, а вот msvc не выдает :) По-моему человек вполне определенно заявил, что пользуется Linux, при чем здесь msvc? Насчет четверки может быть и так, не проверял. Просто видел где-то упоминание, что в qt4 все нормально компилится с gcc4. Но конечно могу быть не прав :) . Название: Виртуальные деструкторы Отправлено: Steven_Orko от Июнь 29, 2006, 20:36 to Grigory
Спасибо за совет, завтра попробую в g++ 4.0.1 ))) Название: Виртуальные деструкторы Отправлено: Steven_Orko от Июль 04, 2006, 18:32 Попробывал указанный Grigory ключ. Не сработало. Вопрос остается открытым.
Название: Виртуальные деструкторы Отправлено: D_N_S от Июль 05, 2006, 12:57 В тему виртуальных деструкторов.
Был переопределен комбобокс - AdvCombo. В окне (порождено от ui) был членом класса обычный комбобокс, который потом в рантайм удалялся и на его месте new-ится свой MegaCombo. У QComboBox деструктор НЕвиртуальный. Вопрос - почему вызывается деструктор от !AdvCombo??? Название: Виртуальные деструкторы Отправлено: Steven_Orko от Июль 05, 2006, 19:37 to D_N_S
Потому что QComboBox унаследован от QObject, у которого деструктор виртуальный. Стандарт гласит, что если предок имеет виртуальный деструктор, то все его потомки тоже будут иметь виртуальный деструктор,даже если он таковым не объявлен. Название: Виртуальные деструкторы Отправлено: D_N_S от Июль 06, 2006, 12:19 Steven_Orko, спасибо.
P.S. А ларчик просто открывался оказывается ) |