0

ここに qt の別の問題があります: QAbstractTableModel を拡張しましたが、コンパイル エラーが発生しました (私は cmake を使用しています)。

// 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 の関数TableModel': /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: undefined reference tovtable ' /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: への未定義参照vtable for TableModel' collect2: ld returned 1 exit status

誰かが同じ問題を抱えていますか??

4

6 に答える 6

3

MOCを介してヘッダーを実行し、それらのMOCオブジェクトファイルをリンクしていることを確認してください。

于 2008-11-26T21:17:30.160 に答える
0

はい、vtable エラーは雌犬です。
純粋仮想メソッドでもある code() メソッドを実装する必要があります。

QAbstractTableModelのドキュメントから:

サブクラス
化 QAbstractTableModel をサブクラス化する場合、rowCount()、columnCount()、および data()を実装する必要があります。

私もvtableの問題を抱えており、data()を実装したので、他の仮想がらくたがありませんが、どれかわかりません。

于 2010-06-18T20:41:44.583 に答える
0

vtable エラーのほぼ 100% は、ヘッダー/クラス定義の欠落、またはそれらの定義のタイプミスが原因です。そのため、最初にすべきことは、ヘッダーとソースが正しい (そしてプロジェクトに含まれている) ことを確認することです。私は個人的にそのためにQtを最低の地獄に呪い、プロジェクトファイルの小さなタイプミスを見逃しました。面白くありません:)

于 2008-12-03T19:01:38.377 に答える
0

必要な cpp ファイルを CMakeLists.txt に追加して解決しました。

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

cmake を実行すると、moc* が自動的に作成されます

于 2008-12-02T12:31:25.840 に答える
-1

これは、オブジェクトが moc されていない場合によくあるバグです。後で時間を節約するために、デバッグ ドキュメント全体を読みます。

于 2008-12-11T02:43:34.460 に答える