Неопределенная ссылка на vtable, Qt в Linux - PullRequest
5 голосов
/ 24 декабря 2010

Я пытался скомпилировать программу Qt и OpenGL в Code :: Blocks в Ubuntu 10.04. Я получаю неопределенную ссылку на vtable для GLWidget

#ifndef _GLWIDGET_H
#define _GLWIDGET_H

#include <QtOpenGL/QGLWidget>
#include "stdlib.h"

class GLWidget : public QGLWidget {

    Q_OBJECT // must include this if you use Qt signals/slots

public:
    GLWidget(QWidget *parent = 0);
    ~GLWidget();
protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
    void keyPressEvent(QKeyEvent *event);
};

#endif  /* _GLWIDGET_H */

Я позаимствовал код у этого парня, чтобы посмотреть, работает ли он, потому что мой не работал по той же причине. код

А вот и GLWidget.cpp:

#include <QtGui/QMouseEvent>
#include "glwidget.h"

GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent) {
    setMouseTracking(true);
}

GLWidget::~GLWidget()
{
}

void GLWidget::initializeGL() {
   ...
}

void GLWidget::resizeGL(int w, int h) {
   ...
}

void GLWidget::paintGL() {
    ...
}

void GLWidget::keyPressEvent(QKeyEvent* event) {
    ...
    }
}

Я удалил код из части GL, чтобы сделать его короче. Если вам это нужно, я всегда могу опубликовать его.

#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>
#include "glwidget.h"

int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

    GLWidget window;
    window.resize(800,600);
    window.show();

    return app.exec();
}

Ответы [ 5 ]

5 голосов
/ 24 декабря 2010

В вашем файле project.pro добавьте

QT += opengl

Так что он знает, что должен ссылаться на библиотеки GL.

3 голосов
/ 05 февраля 2011

Очистите ваш проект и запустите на нем qmake.

1 голос
/ 02 марта 2012

У меня возникла именно эта проблема после добавления Q_OBJECT к одному из файлов заголовков в моем проекте.

Я получал это сообщение об ошибке только от в QT Creator, а не когдаЯ создал свой проект из командной строки Linux.

Для меня решение было удалить папку YourProjectName-build-desktop, которая находится на том же уровне, что и каталог вашего проекта.Затем, когда я собрал проект из QT Creator, он волшебным образом сработал.

1 голос
/ 03 ноября 2011

Иногда это происходит при добавлении Q_OBJECT в заголовочный файл и может означать отсутствие файла moc_.

По личному опыту выяснилось, что решение этой проблемы решило следующее:

  1. $ qmake имя файла .pro
  2. $ make
1 голос
/ 24 декабря 2010

'неопределенная ссылка на' vtable for GLWidget 'наиболее вероятно означает, что определение первой не встроенной виртуальной функции GLWidget не связано в исполняемом файле.

В данном случае я предполагаю, что он должен быть предоставлен файлом, сгенерированным moc (но, поскольку я не программирую на QT, я могу ошибаться здесь).

...