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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Если вылезает ошибка "undefined reference to vtable for ..." [СОВЕТ]  (Прочитано 64473 раз)
Fat-Zer
Гость
« Ответ #15 : Январь 09, 2011, 00:51 »

Разнеси в разные файлы... походу moc не переваривает файл с функцией main...
*поправлю себя... если единственное объявление класса встречается в файле с функцией main
« Последнее редактирование: Январь 09, 2011, 00:55 от Fat-Zer » Записан
blood_shadow
Гость
« Ответ #16 : Январь 09, 2011, 00:53 »

; попробуй убрать!
не не помагает, да ; - соответствует пустой инструкции их можно хоть 2 втулить ниче небудет
Записан
brankovic
Гость
« Ответ #17 : Январь 09, 2011, 01:43 »

С кьют недавно начал возиться, но для себя выработал правило: если в классе есть Q_OBJECT, то его объявление должно жить в хедере. Я так понял это фича qt и moc такая. Про слоты: без Q_OBJECT нельзя сделать.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #18 : Январь 09, 2011, 04:19 »

Цитировать
походу moc не переваривает файл с функцией main...

o_O

Цитировать
С кьют недавно начал возиться, но для себя выработал правило: если в классе есть Q_OBJECT, то его объявление должно жить в хедере. Я так понял это фича qt и moc такая.

Ничего подобного. Никто не мешает объявлять классы в main.cpp или прочих cpp файлах. Достаточно заинклудить в конец такого файла <имя_файла>.moc. Например main.moc для случая с main.cpp

Читаем в ассистанте Using the Meta-Object Compiler (moc)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Fat-Zer
Гость
« Ответ #19 : Январь 09, 2011, 04:32 »

И правда сработало=) вот так и познаётся истинный дзен)
Записан
blood_shadow
Гость
« Ответ #20 : Январь 09, 2011, 19:53 »

Ничего подобного. Никто не мешает объявлять классы в main.cpp или прочих cpp файлах. Достаточно заинклудить в конец такого файла <имя_файла>.moc. Например main.moc для случая с main.cpp
спасибо, работает
попробовал вручную исправить меик-файл в секции компиляции как указано в ассистанте
Код:
release\main.o: release\main.moc

release\main.moc: ..\C++2\main.cpp
moc $(DEFINES) $(INCPATH) -i $< -o $@

без добавления #include "main.moc" ошибка вилетает прежняя..
В чем магия это инклуда? вроде и меик-файл поправил, а всеравно..
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #21 : Январь 09, 2011, 20:02 »

>>release\main.o: release\main.moc
а что main.o от main.cpp не зависит?
Записан

Юра.
blood_shadow
Гость
« Ответ #22 : Январь 09, 2011, 20:18 »

>>release\main.o: release\main.moc
а что main.o от main.cpp не зависит?
да вроде как-бы main.moc: зависит от ..\C++2\main.cpp, а потом уже главная цель release\main.o: release\main.moc

Передрал данный код с асистанта радел Using the Meta-Object Compiler (moc) глава Writing Make Rules for Invoking moc
я так предполагаю что запись говорит - обработать мок*ом main.cpp и сделать с него main.moc(добавить метаинформацию), а потом этот main.moc скомпилировать в main.o
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #23 : Январь 09, 2011, 20:57 »

создаётся mao-файл, инклюдится в main.cpp и то что получилось компилируется.
Записан

Юра.
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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