Nicht definierter Verweis auf vtable. Versuche ein Qt-Projekt zu kompilieren
Ich bin mit Code::Blocks 8.02 und dem mingw 5.1.6 compiler. Ich bekomme diese Fehlermeldung, wenn ich kompilieren meine Qt-Projekt:
C:\Documents und Einstellungen\Der
Fuzz\Desktop\GUI\App_interface.cpp|33|undefined
reference to `vtable for AddressBook'
Datei 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
Datei 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"));
}
InformationsquelleAutor der Frage TheFuzz | 2009-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warnung: führen Sie nicht, wenn Sie bereits eine .pro-Datei - Sie werden es verlieren!
Um automatisch sicherzustellen, dass alle moc-cpp-Dateien generiert werden, erhalten Sie qmake automatisch erzeugt .pro-Datei, für die Sie, statt selbst eines zu schreiben.
Laufen
in das Projekt-Verzeichnis, und qmake Scannen Ihre Verzeichnis für alle C++ - Header und source-Dateien zu generieren, moc cpp-Dateien.
InformationsquelleAutor der Antwort blwy10
Bei der Verwendung von Qt Creator:
InformationsquelleAutor der Antwort Anurag Verma
Das problem ist fast sicher, dass Sie nicht zu kompilieren oder nicht verknüpfen der erzeugten moc_AddressBook.cpp Datei. (Es sollte haben gewesen erzeugt für Sie -- Sie sind läuft der Qt
moc
auf Ihren code vor dem kompilieren, richtig?)Antwort ein wenig mehr gründlich, die
Q_OBJECT
makro Signale der Qtmoc
tool zum erstellen einer zusätzlichen Umsetzung-Datei, die den code enthält, die nötig ist, umQObject
's meta-information-system. Wenn Sie irgendwelche Signale oder slots, es würde noch ein paar Sachen für diejenigen, die als gut.Eine alternative Lösung könnte sein, entfernen Sie die
Q_OBJECT
makro. Sie wahrscheinlich nicht wollen, dies zu tun, aber es würde helfen, das unmittelbare problem, und es ist nicht unbedingt notwendig, mit dem code, den Sie präsentiert haben.Außerdem würde ich beachten Sie, dass Sie Ihre Linie:
Sollte wohl sein:
basierend auf, wie Sie präsentiert werden die Dateinamen in der Frage.
InformationsquelleAutor der Antwort Caleb Huitt - cjhuitt
Vorausgesetzt, Sie sind mit qmake zum erstellen des Makefiles, werden Sie sicher, dass Adressbuch.h angegeben ist .pro-Datei-HEADER ist variable, z.B.
InformationsquelleAutor der Antwort Jeremy Friesner
Habe ich diese während der Verwendung von rein virtuellen Funktionen. Zum Beispiel,
"virtual void process();"
gab diese Fehlermeldung, während
"virtual void process() = 0;"
machte es Weg.
Für jeden, der Googeln dieses problem auf, überprüfen Sie, ersten.
Ich bin mit Netbeans mit dem MinGW-compiler.
InformationsquelleAutor der Antwort Jesse Victors
Ich hatte das gleiche problem aber sobald ich mein Konstruktor in der header-Datei anstelle der .cpp verschwand die Fehlermeldung. Auch die zugehörige moc-Datei fehlt im Dateisystem und in der Makefile den Abschnitt"compiler_moc_header_make_all" . Ich lief ein qmake dann schließlich alles gebaut, mit Erfolg. Ich ging um zu prüfen, Makefile, und es war jetzt da.
InformationsquelleAutor der Antwort yan bellavance
gelöscht, den Ordner, neu gestartet, Qt Creator und es funktionierte
InformationsquelleAutor der Antwort yolo
Komme ich auf das gleiche problem, erstellen Sie das Projekt neu nie aktualisieren der Makefile Entferne ich die Makefile und den Wiederaufbau , die das problem ist Weg.
ps: den Befehl 'make' aus der Befehlszeile geben Sie detail-Informationen ist als die IDE, und hilfreich sein, um das eigentliche problem.
InformationsquelleAutor der Antwort user281754
Eine Ursache ist, wenn Sie erklären, eine virtuelle Funktionen in eine Klasse, und Sie definieren nicht Ihre Körper.
InformationsquelleAutor der Antwort agus
In meinem Fall Alles neu erstellen, nicht genug war, musste ich löschen build-Verzeichnis und machen Alles neu erstellen - dann hat es geklappt!
InformationsquelleAutor der Antwort Alexey Petrenko
Für CMake-Projekte, setzen CMAKE_AUTOMOC AUF, diese Feste mein problem.
InformationsquelleAutor der Antwort Dumisani Kunene
Gehen .pro-Datei, und stellen Sie sicher,.h-Datei hat 'zählen' vor.
HEADER += enthalten/- Datei.h \
include/Datei2.h
InformationsquelleAutor der Antwort Phil
Ich hatte das gleiche problem, die versuchen, eine geschützte virtuelle Funktion. Zwei Dinge gearbeitet.
void process();
zuvoid process() = 0;
process()
öffentlichen statt privatenInformationsquelleAutor der Antwort khafen
Erhalten Sie die gleiche Fehlermeldung, wenn Sie versehentlich einen Destruktor Prototyp. Fügen Sie einen leeren Destruktor definition oder entfernen der Prototyp.
InformationsquelleAutor der Antwort Emil Fors
Bin ich mit dem Qt creator zu kompilieren und laufen meine Programme, die ich nicht verwenden Qt command prompt oft. Eine Sache, die ich Tat, um loszuwerden, die lästigen Fehler "vtable etwas etwas" wird durch hinzufügen der folgenden Zeilen in
.pro
Datei.InformationsquelleAutor der Antwort Mmakgabo Makgoba