2008-11-26 3 views
0

Вот еще одна проблема, с Qt: Я удлинить QAbstractTableModel, но я получаю ошибку компиляции (я использую CMake)QAbstractTableModel наследование виртуальные таблицы проблема

// file.h 
#ifndef TABLEMODEL_H 
#define TABLEMODEL_H 

#include <QAbstractTableModel> 

class TableModel : public QAbstractTableModel 
{ 
Q_OBJECT 

public: 
TableModel(QObject *parent = 0); 
int rowCount(const QModelIndex &parent = QModelIndex()) const; 
int columnCount(const QModelIndex &parent = QModelIndex()) const; 
}; 
#endif 

// file.c 
#include "tableModel.h" 

TableModel::TableModel(QObject *parent) 
: QAbstractTableModel(parent){} 
int TableModel::rowCount(const QModelIndex &) const 
{ return 1; } 

int TableModel::columnCount(const QModelIndex &) const 
{ return 1;} 

при компиляции я получаю:

В функция TableModel': /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: undefined reference to для TableModel виртуальных таблиц» /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: неопределенная ссылка на vtable for TableModel' collect2: ld returned 1 exit status

ли кто-нибудь получили те же проблемы ??

ответ

0

Почти 100% проценты ошибок виртуальных таблиц вызваны либо недостающие заголовки определения/класса или в этих за опечатками определений, так первое, что нужно сделать, это убедиться, что вы получили правильные заголовки и источники (и включены в проект). Я лично проклинал Qt до самого низкого ада за это и пропустил эту крошечную опечатку в файле проекта, а не весело :)

3

Убедитесь, что вы используете свой заголовок через MOC и связываете эти объектные файлы MOC.

+0

Действительно, это ответ. С QMake вам нужно будет добавить заголовок к переменной HEADERS, но я не знаю о cmake. – mxcl 2008-11-27 18:33:31

+0

Как это делается на создателе QT? – Petruza 2010-06-18 20:48:29

+0

@Petruza, я не знаю, поскольку я не использую создателя Qt. Если вы можете отредактировать файл qmake (.pro), я проверил бы его первым. – strager 2010-06-19 01:23:26

0

Решено добавить в CMakeLists.txt необходимый файл cpp.

set(tutorial_SRCS app.cpp mainWin.cpp tableModel.cpp) 

Когда я побегу CMake, МОЦ * будет создан автоматически

0

Это довольно распространенная ошибка, когда object isn't moc'ed. Я прочитал весь debugging document, чтобы сэкономить некоторое время по дороге.

0

Да, ошибки vtable - сука.
Вы должны реализовать метод code(), который также является чистым виртуальным методом.

Из QAbstractTableModel documentation:

подклассов
При наследовании QAbstractTableModel, вы должны выполнить сверку(), ColumnCount(), и данные().

У меня тоже проблема с таблицей vtable, и я реализовал data(), поэтому мне не хватает другого виртуального дерьма, но я не знаю никого.

Смежные вопросы