0

私は視覚化プロジェクトに取り組んでいます。QGLViewerで3Dモデルを表示する必要があります。次のように定義されたQGLViewerのサブクラスがあります。

class GLViewer : public QGLViewer
{
    Q_OBJECT
public:
    explicit GLViewer(QWidget *parent = 0,const QGLWidget* shareWidget=0, Qt::WFlags flags=0);
protected:
    void initializeGL();
    void resizeGL(int width, int height);
    void paintGL();
signals:
public slots:
};

次のようにc'torを実装します。

GLViewer::GLViewer(QWidget *parent, const QGLWidget* shareWidget, Qt::WFlags flags):
    QGLViewer(parent,shareWidget,flags)
{
}

リンカーエラーが発生します:

glviewer.o: In function `GLViewer::GLViewer(QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)':
glviewer.cpp:(.text+0x18): undefined reference to `vtable for GLViewer'
glviewer.cpp:(.text+0x20): undefined reference to `vtable for GLViewer'

編集: これは.proファイルの内容です:

QT       += core gui opengl xml

TARGET = qglviewer-test
TEMPLATE = app

LIBS += -lqglviewer-qt4 -lGLU -lGLEW

SOURCES += main.cpp\
        mainwindow.cpp \
        glviewer.cpp

HEADERS  += mainwindow.h \
        glviewer.cpp

フォーム+=mainwindow.ui

4

3 に答える 3

3

GLViewerクラス(コンストラクターのみ)の完全な実装を投稿していませんが、このエラーが発生する理由は次のとおりです。

undefined reference to `vtable for GLViewer'

いくつかの仮想関数を実装しなかったということです(私は、、またはのいずれかを想定していinitializeGL()ますresizeGL(int width, int height)paintGL()

于 2012-04-20T09:57:29.473 に答える
1

あなたはmocを通してglviewer.hを実行していませんでした。それがエラーが言っていることです。.proファイルで変更します

HEADERS  += mainwindow.h \
        glviewer.cpp

HEADERS  += mainwindow.h \
        glviewer.h               <------
于 2012-05-29T01:45:49.657 に答える
1

VJovicが言ったように、この種の問題は通常、実装されていない仮想関数によって引き起こされます。GLViewerデストラクタの宣言/定義がないことに気づきました。のデストラクタはQGLViewer関数virtualですか?この場合、クラスにデストラクタを提供してみてGLViewerください。これで問題が解決する場合があります。

于 2012-04-20T10:08:14.827 に答える