Неопределенная ссылка на vtable. Попытка скомпилировать проект Qt - PullRequest
49 голосов
/ 12 октября 2009

Я использую Code :: Blocks 8.02 и компилятор mingw 5.1.6. Я получаю эту ошибку при компиляции моего проекта Qt:

C: \ Документы и настройки \ Fuzz \ Desktop \ GUI \ App_interface.cpp | 33 | неопределенный ссылка на `vtable for AddressBook '

Файл AddressBook.h:

 #ifndef ADDRESSBOOK_H
 #define ADDRESSBOOK_H

 #include <QWidget>

 class QLabel;
 class QLineEdit;
 class QTextEdit;

 class AddressBook : public QWidget
 {
     Q_OBJECT

 public:
     AddressBook(QWidget *parent = 0);

 private:
     QLineEdit *nameLine;
     QTextEdit *addressText;
 };

 #endif

Файл AddressBook.cpp:

#include <QtGui>
#include "addressbook.h"

AddressBook::AddressBook(QWidget *parent)
     : QWidget(parent)
{
    QLabel *nameLabel = new QLabel(tr("Name:"));
    nameLine = new QLineEdit;

    QLabel *addressLabel = new QLabel(tr("Address:"));
    addressText = new QTextEdit;

    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(nameLabel, 0, 0);
    mainLayout->addWidget(nameLine, 0, 1);
    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
    mainLayout->addWidget(addressText, 1, 1);

    setLayout(mainLayout);
    setWindowTitle(tr("Simple Address Book"));
}

Ответы [ 16 ]

1 голос
/ 26 февраля 2010

Я прихожу к той же проблеме, перестроить проект, никогда не обновлять Makefile, я удаляю Makefile и перестраивать, проблема исчезла. ps: запустить 'make' из командной строки может дать вам подробную информацию, чем IDE, и полезно, чтобы решить реальную проблему.

0 голосов
/ 08 января 2019

Просто Run qmake для вашего проекта. Это легко сделать, щелкнув правой кнопкой мыши по названию вашего проекта и нажав Run qmake.

0 голосов
/ 08 ноября 2017

Вы получите то же сообщение об ошибке, если случайно добавите прототип деструктора. Добавьте пустое определение деструктора или удалите прототип.

0 голосов
/ 07 октября 2014

У меня была такая же проблема при попытке использовать защищенную виртуальную функцию. Две вещи сработали.

  1. Изменение void process(); на void process() = 0;
  2. Сделать process() публичным, а не личным
0 голосов
/ 19 сентября 2014

Я использую Qt creator для компиляции и запуска своих программ, я не часто использую Командную строку Qt . Одна вещь, которую я сделал, чтобы избавиться от надоедливой ошибки " vtable что-то что-то ", это добавление следующих строк в файл .pro.

ШАБЛОН = приложение

QT + = core

0 голосов
/ 10 августа 2010

Перейдите в файл .pro и убедитесь, что в файле .h есть «include» перед ним. HEADERS + = include / file.h \ включить / file2.h

...