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

表格 += 主窗口.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析构函数的声明/定义。is的析构函数QGLViewervirtual函数吗?如果是这种情况,请尝试为GLViewer类提供析构函数,这可能会解决您的问题。

于 2012-04-20T10:08:14.827 回答