nixp.ru v3.0

23 октября 2017,
понедельник,
16:36:38 MSK

DevOps с компанией «Флант»
sandy написал 16 декабря 2006 года в 21:05 (666 просмотров) Ведет себя как мужчина; открыл 10 тем в форуме, оставил 54 комментария на сайте.

Можно ли както увязать wxWidgets и STL

У меня написан класс сс использованием стандартной библиотеки

Теперь хочется GUI-интерфейс к нему подвязать

А именно, — добавить функцию к сущствующему классу с использованием wxWidgets.

Как бы это правилльнее оформить?

sandy

Может я неясно выразился?

Ибо с wxWidgets я только начинаю работать

decvar

нет никаких проблем в использовании stl и wx. Они никак не пересекаются

sandy

В wxWidgets программа начинается с IPLEMENT_APP(MyApp);

А в STL из функции main()

А если и то, и другое использовать, с чего начинать?

Longobard

Фраза «А в STL из функции main()» лишена всякого смысла. с main() начинается любая программа, в том числе и использующая wxWidgets. А stl — просто библиотечка, набор классов.

sandy
Longobard
Фраза «А в STL из функции main()» лишена всякого смысла. с main() начинается любая программа, в том числе и использующая wxWidgets. А stl — просто библиотечка, набор классов.

Пардон. Неправильно выразился. Однако, в программах написанных на wxWidgets функции main() я не наблюдаю. Они содержат объявление IPLEMENT_APP(MyApp); и начинаюся с класса MyApp

myst

Ну и? Это каким-то образом мешает тебе использовать vector v; ?

Longobard
sandy
Пардон. Неправильно выразился. Однако, в программах написанных на wxWidgets функции  main() я не наблюдаю. Они содержат объявление IPLEMENT_APP(MyApp); и начинаюся с класса MyApp

Есть она, плохо ищешь. Без ф-и main программа бы не собиралась ;) Скорее всего main находится внутри самого wxWidgets

sandy
myst
Ну и? Это каким-то образом мешает тебе использовать vector v; ?

Значит, написал я когда-то класс 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.: Если из родительского окна убрать тулбар и статусбар, то один раз программа работает, при повторном открытии, — рушится

myst

vactor > небесопасен с точки зрения исключений, такие конструкции вообще лучше не использовать.

sandy
myst
vactor > небесопасен с точки зрения исключений, такие конструкции вообще лучше не использовать.

Неужели из-за этого ошибка выполнения?

В программах написанных только с использованием STL все ж работало

myst

Нет. Не из-за этого. Я просто так написал, мало ли, вдруг ты не знаешь?

metal

Читай faq на сайте wxWidget, там есть про stl. В wxWidgets переопределен new от этого все проблемы.

sandy
metal
Читай faq на сайте wxWidget, там есть про stl. В wxWidgets переопределен new от этого все проблемы.

Спасибо! Помогло вот это:

#ifdef new

#undef new

#endif

sandy

В догонку. Я так полагаю, что теперь все, что объявлено оператором new нужно явным образом удалять из памяти оператором delete?

decvar

выделил память — убери за собой.

Это типа все еще C++, и сборки мусора все еще нет