Qt помилка - undefined reference to vtable, aleks misyuk - s blog
Програмуючи на Qt і час від часу перевіряючи форуми, доводиться спостерігати, що програмісти часто борються з повідомленнями типу «undefined reference to vtable».
Спробую описати ситуації, коли може виникнути дана помилка, і дати кілька порад, як уникнути її.
Найчастіше дане повідомлення спливає, якщо ви використовуєте MOC.
MOC (Meta-Object Compiler, перекладається як Метаоб'ектная система / компілятор) - механізм, який розширює синтаксис C ++.
MOC:
- необхідний для механізму сигналів-слотів;
- дозволяє програмісту отримувати метаінформацію про підкласах QObject (QObject :: metaObject ());
- використовується для інтернаціоналізації додатків (QObject :: tr ());
- містить в собі корисні розширення синтаксису C ++.
MOC компілятор знаходить і обробляє всі заголовні проекту.
При появі помилки «undefined reference to vtable», в першу чергу очистіть проект і пересоберіте його, не забувши запустити qmake:
make clean
# Видаліть вручну все moc-файли, якщо вони залишилися після виконання make clean
rm Makefile
qmake
make
Якщо помилка не зникла, то перевірте файл проекту (* .pro). Перевірте, щоб всі необхідні заголовки (що включають сигнали і слоти особливо) були включені в проект. Список заголовних файлів повинен міститися у змінній HEADERS:
HEADERS + = firstHeaderFile.h \
otherHeaderFile.h \
secondHeaderFile.h
Якщо ви використовуєте в проекті папку, яка містить заголовні файли, переконайтеся, що додали цю папку в змінну INCLUDEPATH:
Якщо виявили забутий h-, hpp-файл - пересоберіте проект заново.
Проблема залишилася? Тоді ще варіанти: