Russian Qt Forum
Ноябрь 27, 2024, 08:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигналы и слоты в глобальных объектах  (Прочитано 4760 раз)
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.
Может, кто-то знает, в чем может быть дело? Помогите, пожалуйста.
« Последнее редактирование: Август 30, 2010, 15:02 от Luck » Записан
alexman
Гость
« Ответ #1 : Август 30, 2010, 15:02 »

Описание класса делай в h файле, если нужны сигналы/слоты!

Что-то не видно наследования???
Цитировать
class A
{
     Q_OBJECT
};
Что-то не видно наследования???
Записан
Luck
Гость
« Ответ #2 : Август 30, 2010, 15:03 »

Прошу прощения - при редактировании кода для выкладывания сюда случайно убрал наследование. Описание в .h файле не помогло - ошибка та же.
Записан
BRE
Гость
« Ответ #3 : Август 30, 2010, 15:07 »

Прошу прощения - при редактировании кода для выкладывания сюда случайно убрал наследование. Описание в .h файле не помогло - ошибка та же.
Выполни qmake после добавления Q_OBJECT
Записан
Luck
Гость
« Ответ #4 : Август 30, 2010, 15:12 »

Прошу прощения - при редактировании кода для выкладывания сюда случайно убрал наследование. Описание в .h файле не помогло - ошибка та же.
Выполни qmake после добавления Q_OBJECT

Помогло, спасибо. Если не сложно, объясните, пожалуйста, в чем было дело.
Записан
BRE
Гость
« Ответ #5 : Август 30, 2010, 15:13 »

Помогло, спасибо. Если не сложно, объясните, пожалуйста, в чем было дело.
В не чтении документации.  Подмигивающий
Записан
Luck
Гость
« Ответ #6 : Август 30, 2010, 15:15 »

Помогло, спасибо. Если не сложно, объясните, пожалуйста, в чем было дело.
В не чтении документации.  Подмигивающий
О чем конкретно стоит почитать и где?
Записан
BRE
Гость
« Ответ #7 : Август 30, 2010, 15:15 »

О чем конкретно стоит почитать и где?
Почитай в assistant про qmake и moc.
Записан
Luck
Гость
« Ответ #8 : Август 30, 2010, 15:16 »

благодарю) почитаю
Записан
Denjs
Гость
« Ответ #9 : Август 30, 2010, 17:10 »

Делать QMake вообще помогает при непонятных ошибках, особенно если на *_moc.cpp" файлы ругается.
После добавления классов, изменения структуры классов и т.п.
Собственно QMake (как я понимаю суть QT) запускает метакомпилятор, который делает много чего полезного связанного с переводом C++/QT на C++ того компилятора котрый вы используете...
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #10 : Сентябрь 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 22.