Название: Сигналы и слоты в глобальных объектах Отправлено: Luck от Август 30, 2010, 14:58 Здравствуйте.
Сегодня столкнулся с совершенно для себя не понятной проблемой... Существует класс А, унаследованный от QObject, описанный в файле a.cpp. Класс содержит макрос Q_OBJECT. Больше в классе нету вообще ничего (я постепенно все, что в нем было убирал в целях выяснения причины ошибки и оказалось, что ошибка возникает именно при использовании макроса). Файл a.cpp входит в состав статической библиотеки lib.a. В файле a.cpp объявлена глобальная переменная A a; class A: public QObject { Q_OBJECT }; A a; Сама библиотека компилируется нормально. Однако при попытке компиляции приложения, использующего библиотеку появляется следующее: error: In function `A::~A()': error: undefined reference to `vtable for А' error: In function `А::А()': error: undefined reference to `vtable for А' error: collect2: ld returned 1 exit status Ошибка исчезает, если убрать макрос Q_OBJECT из класса или если убрать объявление переменной a. Может, кто-то знает, в чем может быть дело? Помогите, пожалуйста. Название: Re: Сигналы и слоты в глобальных объектах Отправлено: alexman от Август 30, 2010, 15:02 Описание класса делай в h файле, если нужны сигналы/слоты!
Что-то не видно наследования??? Цитировать class A Что-то не видно наследования???{ Q_OBJECT }; Название: Re: Сигналы и слоты в глобальных объектах Отправлено: Luck от Август 30, 2010, 15:03 Прошу прощения - при редактировании кода для выкладывания сюда случайно убрал наследование. Описание в .h файле не помогло - ошибка та же.
Название: Re: Сигналы и слоты в глобальных объектах Отправлено: BRE от Август 30, 2010, 15:07 Прошу прощения - при редактировании кода для выкладывания сюда случайно убрал наследование. Описание в .h файле не помогло - ошибка та же. Выполни qmake после добавления Q_OBJECTНазвание: Re: Сигналы и слоты в глобальных объектах Отправлено: Luck от Август 30, 2010, 15:12 Прошу прощения - при редактировании кода для выкладывания сюда случайно убрал наследование. Описание в .h файле не помогло - ошибка та же. Выполни qmake после добавления Q_OBJECTПомогло, спасибо. Если не сложно, объясните, пожалуйста, в чем было дело. Название: Re: Сигналы и слоты в глобальных объектах Отправлено: BRE от Август 30, 2010, 15:13 Помогло, спасибо. Если не сложно, объясните, пожалуйста, в чем было дело. В не чтении документации. ;)Название: Re: Сигналы и слоты в глобальных объектах Отправлено: Luck от Август 30, 2010, 15:15 Помогло, спасибо. Если не сложно, объясните, пожалуйста, в чем было дело. В не чтении документации. ;)Название: Re: Сигналы и слоты в глобальных объектах Отправлено: BRE от Август 30, 2010, 15:15 О чем конкретно стоит почитать и где? Почитай в assistant про qmake и moc.Название: Re: Сигналы и слоты в глобальных объектах Отправлено: Luck от Август 30, 2010, 15:16 благодарю) почитаю
Название: Re: Сигналы и слоты в глобальных объектах Отправлено: Denjs от Август 30, 2010, 17:10 Делать QMake вообще помогает при непонятных ошибках, особенно если на *_moc.cpp" файлы ругается.
После добавления классов, изменения структуры классов и т.п. Собственно QMake (как я понимаю суть QT) запускает метакомпилятор, который делает много чего полезного связанного с переводом C++/QT на C++ того компилятора котрый вы используете... Название: Re: Сигналы и слоты в глобальных объектах Отправлено: break от Сентябрь 01, 2010, 01:25 Цитировать Делать QMake вообще помогает при непонятных ошибках К сожалению не всегда...Цитировать Собственно QMake (как я понимаю суть QT) запускает метакомпилятор, который делает много чего полезного связанного с переводом C++/QT на C++ того компилятора котрый вы используете... Лично для меня это что-то новенькое - а именно связь qmake с конкретным компилятором. И никакая это не суть Qt - а просто система сборки, cmake его отлично заменяет.По поводу нерешенных проблем qmake уже обсуждалось здесь: http://www.prog.org.ru/index.php?topic=14425.msg94286#msg94286 |