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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] qobject_cast для второго наследники QObject  (Прочитано 4302 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Июль 27, 2015, 11:24 »

Собственно, как сделать?

Код:
class A: public QObject
{ Q_OBJECT };
class B: public A {};

A *aa = new B;
qobject_cast<B*>(aa);//... ошибка: invalid application of 'sizeof' to incomplete type 'QStaticAssertFailure<false>'....
« Последнее редактирование: Август 07, 2015, 11:28 от deMax » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июль 27, 2015, 11:52 »

Вроде бы опечаток не увидел
А через static_cast и dynamic_cast?
Записан

Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Июль 27, 2015, 11:54 »

Q_OBJECT в B классе?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #3 : Июль 27, 2015, 12:06 »

Q_OBJECT в B классе?
Весь код сейчас лежит в main.cpp
Код:
class A: public QObject {};
class B: public A {Q_OBJECT}; //... ошибка: undefined reference to `vtable for B'
Код:
class A: public QObject {Q_OBJECT};//...ошибка: undefined reference to `vtable for A'
class B: public A {Q_OBJECT};//...ошибка: undefined reference to `vtable for B'
Сам часто пользовался qobject_cast, но они всегда были прямыми наследниками от QWidget/QObject
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Июль 27, 2015, 12:09 »

Надо main.moc внизу файла заинклудить.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #5 : Июль 27, 2015, 14:30 »

Надо main.moc внизу файла заинклудить.
что? А можно пример, как это может работать.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Июль 27, 2015, 14:31 »

https://forum.qt.io/topic/12388/q_object-in-cpp-file/4
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #7 : Август 03, 2015, 11:41 »

Раскидал классы в отдельные cpp и h. Само заработало, так и не понял что ему нужно и почему он выделывается.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Август 03, 2015, 11:50 »

Раскидал классы в отдельные cpp и h. Само заработало, так и не понял что ему нужно и почему он выделывается.
Потому что "просто так" moc генератор смотрит только .h файлы. А Q_OBJECT в cpp файлах не видит, moc файлы для них не создает, ну и, естественно, ошибки линковки. Обычно с этим сталкиваются через неск дней знакомства с Qt  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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