LINUX.ORG.RU

Затык на линковке - undefined reference to vtable. Наследник QAbstractTableModel.

 


0

2

Одолел компиляцию, теперь затык на линковке.

Вроде бы стандартный класс:

class AttachTableModel : public QAbstractTableModel
{
  Q_OBJECT // <-- ЗДЕСЬ ОШИБКА

public:
  AttachTableModel(QObject *parent);
  virtual ~AttachTableModel();


AttachTableModel::AttachTableModel(QObject *parent) : QAbstractTableModel(parent) // <-- ЗДЕСЬ ОШИБКА
{
  table=NULL;
}

AttachTableModel::~AttachTableModel() // <-- ЗДЕСЬ ОШИБКА
{
  delete table;
}


Ошибки выглядят так:

./build/AttachTableModel.o: In function `ZN16AttachTableModelC2EP7QObject':
D:\work\build-mytetra-Desktop_Qt_5_4_2_MinGW_32bit-Debug/../mytetra_develop/src/models/attachTable/AttachTableModel.cpp:6: undefined reference to `vtable for AttachTableModel'
./build/AttachTableModel.o: In function `ZN16AttachTableModelD2Ev':
D:\work\build-mytetra-Desktop_Qt_5_4_2_MinGW_32bit-Debug/../mytetra_develop/src/models/attachTable/AttachTableModel.cpp:12: undefined reference to `vtable for AttachTableModel'
./build/AttachTableModel.o: In function `ZN16AttachTableModel2trEPKcS1_i':
Makefile.Debug:513: recipe for target 'bin/mytetra.exe' failed
mingw32-make[1]: Leaving directory 'D:/work/build-mytetra-Desktop_Qt_5_4_2_MinGW_32bit-Debug'
makefile:34: recipe for target 'debug' failed
D:\work\build-mytetra-Desktop_Qt_5_4_2_MinGW_32bit-Debug/../mytetra_develop/src/models/attachTable/AttachTableModel.h:18: undefined reference to `AttachTableModel::staticMetaObject'
collect2.exe: error: ld returned 1 exit status


Ничего подозрительного в коде не вижу.

В чем может быть проблема?

Ветка кода на GitHub: https://github.com/xintrea/mytetra_dev/tree/attachFiles

Коммит: https://github.com/xintrea/mytetra_dev/commit/893487456149ad0aef4a9917a0f946a...

★★★★★
Ответ на: комментарий от fluorite

Склонировал бранч attachFiles, добавил в src/libraries/qtSingleApplication5/qtlocalpeer.cpp #include <QDataStream>, всё собралось, Qt5.5, gentoo.

Как с языка снял.

2ТС: ошибка похожа на то, что один из moc-файлов почему-то не отправляется на линковку.

gentoo_root ★★★★★
()
Ответ на: комментарий от fluorite

Да чтож мне так везёт...

Но я должен собрать на 5.4.2.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

А ты смог собрать?

Да, абсолютно такая же конфигурация (gentoo, Qt 5.5), и тоже пришлось дописать #include <QDataStream>.

Дополнительно могу сказать, что Qt у меня собран clang'ом, но это вряд ли на что-то вообще влияет.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

В общем, какой-то трабл с системой сбори в Qt 5.4.2

В каталоге с .pro файлом лежат файлы:

object_script.mytetra.Debug
object_script.mytetra.Release


И вот в них есть все, кроме moc_AttachTableData.o. Может быть, еще чего-то не хватает.

Удалил их, и сборка заработала.

Кстати, при сборке эти файлы вновь не появились. Для чего эти файлы, что это за «скрипты» - непонятно.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Для чего эти файлы, что это за «скрипты» - непонятно.

Ну я загуглил, говорят, что это список объектных файлов, который скармливается линкеру. Появляться должен, если их слишком много, чтобы пихать их через командную строку. Почему снова не появились и почему не обновились при добавлении файла — не знаю.

gentoo_root ★★★★★
()

archlihux, qt4.8 В какой-то файл добавил #include <QToolButton>, все собралось

tekilla
()
Ответ на: комментарий от Xintrea

В общем, какой-то трабл с системой сбори в Qt 5.4.2

У меня есть другая версия ;)

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.