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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: undefined reference to ‘vtable - неужели нет решения для main.cpp?  (Прочитано 3776 раз)
yarick
Гость
« : Январь 19, 2013, 21:02 »

Если класс с макросом Q_Object объявить перед main.cpp - то компилятор выдаст ошибку "undefined reference to ‘vtable ...".
Это происходит потому, что moc-препроцессор не обрабатывает cpp а обрабатывает только h. Соответственно проблема решается грамтоным размещением объявления класса с макросом в h-файле, а тела класса - в cpp. Все мои классы я так и делаю.

Однако я создаю собственную библиотеку примеров кода, на которой показываю использование тех или иных языковых элементов и классов.
И для неё крайне нежелательно создавать класс в отдельном файле - пропадает наглядность, и вообще не удобно. Я пытался обмануть qmake, включая HEADERS += main.cpp - но это не работает.

По-сути класс мне нужен только для того чтобы в него запихнуть слоты и показать примеры работы сигналов.
Вижу следующие пути решения проблемы:
  • Заставить qmake обрабатывать мой cpp файл каким-то образом, вот только каким?
  • Соединить сигналы с обычными функциями, только помойму это не возможно сделать. Можно ли как-то отследить сигналы без слотов?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Январь 19, 2013, 21:13 »

в конец main.cpp допиши #include "main.moc"
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
yarick
Гость
« Ответ #2 : Январь 20, 2013, 07:41 »

в конец main.cpp допиши #include "main.moc"
Спасибо, это действительно работает!
Получается что препроцессор создаёт moc-файлы для cpp но не включает их?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Январь 21, 2013, 17:03 »

в конец main.cpp допиши #include "main.moc"
Спасибо, это действительно работает!
Получается что препроцессор создаёт moc-файлы для cpp но не включает их?

Это указание для qmake, который во время парсинга .pro файла и переменной SOURCES, проверяет наличие такой строки в .cpp файлах, и создаёт нужные .moc файлы. Если данной директивы нет, то moc файлы создаются как обычно и только там, где нужно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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