sandy
написал 16 декабря 2006 года в 21:05 (1218 просмотров)
Ведет себя
как мужчина; открыл 10 тем в форуме, оставил 54 комментария на сайте.
Можно ли както увязать wxWidgets и STL
У меня написан класс сс использованием стандартной библиотеки
Теперь хочется GUI-интерфейс к нему подвязать
А именно, — добавить функцию к сущствующему классу с использованием wxWidgets.
Как бы это правилльнее оформить?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Может я неясно выразился?
Ибо с wxWidgets я только начинаю работать
нет никаких проблем в использовании stl и wx. Они никак не пересекаются
В wxWidgets программа начинается с IPLEMENT_APP(MyApp);
А в STL из функции main()
А если и то, и другое использовать, с чего начинать?
Фраза «А в STL из функции main()» лишена всякого смысла. с main() начинается любая программа, в том числе и использующая wxWidgets. А stl — просто библиотечка, набор классов.
Пардон. Неправильно выразился. Однако, в программах написанных на wxWidgets функции main() я не наблюдаю. Они содержат объявление IPLEMENT_APP(MyApp); и начинаюся с класса MyApp
Ну и? Это каким-то образом мешает тебе использовать vector v; ?
Есть она, плохо ищешь. Без ф-и main программа бы не собиралась ;) Скорее всего main находится внутри самого wxWidgets
Значит, написал я когда-то класс DBF, в котором данные хранятся в std::vector > и дописал в него функцию-член Browse(wxMDIChildFrame*)
В wxWidgets создал class MyFrame : public wxMDIParentFrame и class MyChild: public wxMDIChildFrame
В дочернем классе объявил DBF* db;
Далее, в дочернем классе пишем: db=new DBF(«proba.dbf») — Конструктора по умолчанию нет, есть лишь DBF::DBF(char*).
До этого все работало, пока не вызвал еще одну функцию из DBF
Функция Use(), которая открывает бинарный файл, читает заголовок, дескрипторы полей и помещает данные в std::vector >
На этом программа и рушится (компилится и линкуется без проблем)
P.S.: Если из родительского окна убрать тулбар и статусбар, то один раз программа работает, при повторном открытии, — рушится
vactor > небесопасен с точки зрения исключений, такие конструкции вообще лучше не использовать.
Неужели из-за этого ошибка выполнения?
В программах написанных только с использованием STL все ж работало
Нет. Не из-за этого. Я просто так написал, мало ли, вдруг ты не знаешь?
Читай faq на сайте wxWidget, там есть про stl. В wxWidgets переопределен new от этого все проблемы.
Спасибо! Помогло вот это:
#ifdef new
#undef new
#endif
В догонку. Я так полагаю, что теперь все, что объявлено оператором new нужно явным образом удалять из памяти оператором delete?
выделил память — убери за собой.
Это типа все еще C++, и сборки мусора все еще нет