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-файл - пересоберіте проект заново.

Проблема залишилася? Тоді ще варіанти: