MFC vs Qt |
Здравствуйте, гость ( Вход | Регистрация )
MFC vs Qt |
DEADHUNT |
31.1.2011, 16:22
Сообщение
#11
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
Ну, мне например хватило следующего:
Вот такой код приводит к очень большим проблемам. То же касается std::set например. нельзя изменять ключ у существующего элемента(тем более у типа first есть модификатор const, поэтому без явного приведения типов твой код не скомпилируется), у тебя код не правильный с точки зрения логики и стандарта, VC++ тут не причём. Сообщение отредактировал DEADHUNT - 31.1.2011, 16:22 |
|
|
Rocky |
31.1.2011, 16:35
Сообщение
#12
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
нельзя изменять ключ у существующего элемента(тем более у типа first есть модификатор const, поэтому без явного приведения типов твой код не скомпилируется), у тебя код не правильный с точки зрения логики и стандарта, VC++ тут не причём. Ну я ж не из головы его выдумал. Естественно неправильный. Попробую найти в исходниках где так делал (если найду - на тот момент я не использовал системы контроля версий)... |
|
|
Алексей1153 |
31.1.2011, 18:07
Сообщение
#13
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Ну я ж не из головы его выдумал. Естественно неправильный. Попробую найти в исходниках где так делал (если найду - на тот момент я не использовал системы контроля версий)... не нужно искать. Вполне возможно, что тебе просто запомнилось что-то не так (наверняка эмоции били через край ). Я же попробовал - компилятор не пропускает. Вряд ли у тебя была другая версия студии Сообщение отредактировал Алексей1153 - 31.1.2011, 18:08 |
|
|
Iron Bug |
31.1.2011, 18:31
Сообщение
#14
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ничо вы тут холивары развели
а я поддержу мнение Rocky, не в смысле, что я за Qt (я просто с ним не работаю), а против MFC. из моего многолетнего опыта программирования (профессионально и для себя) я поняла, что те, кто писал MFC, видимо, никогда ею не пользовались сами. иначе они бы давно поправили то море багов и недочётов (да даже просто банальных глупостей!), которое там имелось, имеется и, видимо, так и будет существовать до конца мелкософта. ну и как системный программист, конечно же, я предпочитаю линюкс. и я ещё раз в этом убедилась, написав тут недавно по работе драйвер под семёрку: мелкософт зарывается в индусский говнокод. и он повсюду. он не только в MFC, он даже в самих основах системы. там полно багов, нестыковок и нелогичных ни с какой точки зрения решений. в общем, удовольствия для программиста мало, а для юзера - нестабильность, лишние деньги и необходимость приобретать неоправданно мощное железо. единственное, за счёт чего держится мелкософт - за счёт распространённости и того, что под них написано много прикладного ПО, чисто исторически. но уже идёт процесс: сторонние фирмы начали присматриваться к линюксу и писать свои софтины под него. если мелкософт не перестанет писать говнокод - они окончательно забредут в тупик и лопнут. видимо, поэтому Гейтс отошёл от дел и перевёл свои сбережения в туристический бизнес. |
|
|
Алексей1153 |
31.1.2011, 18:36
Сообщение
#15
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
Rocky |
31.1.2011, 19:37
Сообщение
#16
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Iron Bug, спасибо =)
Да, насчет std::map я погорячился... Ну а вот это как?
Сообщение отредактировал Rocky - 31.1.2011, 19:38 |
|
|
Алексей1153 |
31.1.2011, 19:43
Сообщение
#17
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
напиши комментарии - я не знаю, что должно произойти (этим классом не доводилось пользоваться)
Сообщение отредактировал Алексей1153 - 31.1.2011, 19:44 |
|
|
Rocky |
31.1.2011, 19:48
Сообщение
#18
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Цитата напиши комментарии - я не знаю, что должно произойти В смысле? К чему писать? Там же итак коммент есть.... std::set - ассоциативный массив (коллекция). В нем ни в коем случае нельзя изменять данные напрямую. К чему это приводит я там коммент оставил... По названиям ф-й думаю если работаешь с std::map должно быть понятно. |
|
|
Алексей1153 |
31.1.2011, 19:57
Сообщение
#19
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
std::map я понимаю, что такое ключ - тоже.
почитал МСДН, вижу, что ты неправильно работаешь с классом: Цитата The STL container class set is used for the storage and retrieval of data from a collection in which the values of the elements contained are unique and serve as the key values according to which the data is automatically ordered. The value of an element in a set may not be changed directly. Instead, you must delete old values and insert elements with new values . may not - значит не нужно, но не запрещено. must delete old values - обязательно должен удалить старое значение, а потом только insert elements with new values И это, кстати, не ассоциативный массив, а просто набор уникальных элементов, отсортированных по предикату Сообщение отредактировал Алексей1153 - 31.1.2011, 20:00 |
|
|
Rocky |
31.1.2011, 21:00
Сообщение
#20
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Так блин... Я знаю что это неправильно. Но почему nmake такое пропускает даже ворнинга не выдает???? Я знаю это сейчас, а по началу были очень большие грабли.
Цитата почитал МСДН, вижу, что ты неправильно работаешь с классом: Извини не удержусь.... капитан очевидность )))))))))))))))))))))))))))))))) Я ж специально привел неправильный пример чтобы показать, что компилятор мелкомягких допускает такие вещи.... Это должно быть forbidden. gcc ведь ругается на такие конструкции. И более того, чтобы понимать почему это должно быть forbidden нужно понимать как вообще устроен std::set ----- UPD Цитата(Rocky) 4. Почему нельзя получать доступ к элементам управления окна не из экзэемпляра самого окна? Цитата(Алексей1153) 4 - как это нельзя ? GetDlgItem(ID). Создал тестовый MFC/SDI проект. VS 2008. Открыл в ресурсах диалоговое окно "About - IDD_ABOUTBOX". Перетащил мышью на форму кнопку. У нее идентификатор IDC_BUTTON1. Файл test2.cpp:
Почему так??? Я ведь создал экземпляр класса. Я ожидаю, что получу доступ ко всем его открытым методам/членам. Так почему же ошибка???? Ах, вспомнил. Дело в том, что нужно помнить, что вызов CDialog::DoModal() инициирует вызов функции CDialog::OnInitDialog(), в котором и создаются элементы управления этого диалогового окна. Таким образом, чтобы инициализировать элементы управления диалогового окна, единственное где я могу это сделать - только из самого окна. Нужно писать функцию Init(), которую вызывать сразу после создания экземпляра класса, в нее передавать нужные параметры классу. Но в самой Init() еще нельзя выводить эти данные в элементы управления, потому что CDialog::OnInitDialog() еще не был вызван. Таким образом, даже если мне эти данные и нафиг не нужны потом, я должен их сохранять в мемберах. Вот одно это уже убивает. Если здесь есть обходной путь, расскажи пожалуйста... Я честно не знаю. =) Сообщение отредактировал Rocky - 31.1.2011, 21:01 |
|
|
Текстовая версия | Сейчас: 15.1.2025, 15:40 |