
Q_OBJECT-Verknüpfungsfehler: 'undefinierter Verweis auf vtable'
Berücksichtigen Sie den folgenden Qt-Codeausschnitt:
<code class="cpp">class T : public QObject, public QGraphicsItem
{
Q_OBJECT
public:
T() {}
QRectF boundingRect() const {return QRectF();}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) {}
};
int main()
{
T t;
return 0;
}</code>
Nach dem Login kopieren
Beim Kompilieren dieses Codes haben Sie Es können Linker-Fehler auftreten wie:
undefined reference to `vtable for T'
undefined reference to `vtable for T'
...
Nach dem Login kopieren
Lösung:
Dieser Fehler tritt normalerweise auf, wenn die MOC-generierte Einheit für Ihre Klasse nicht im Verknüpfungsprozess enthalten ist. Die MOC-Einheit enthält Metainformationen über die Klasse, einschließlich ihres Q_OBJECT-Makros.
Mögliche Ursachen und Lösungen:
-
Separate Header-Datei: Stellen Sie sicher, dass sich Ihre Klassendeklaration in einer separaten Header-Datei befindet. Das Build-System durchsucht möglicherweise keine Implementierungsdateien, um Klassendeklarationen zu finden.
-
MOC-Generierung: Stellen Sie sicher, dass die MOC-Einheit generiert wurde. Führen Sie qmake erneut aus, um qmake zu zwingen, die erforderlichen MOC-Regeln zu erstellen. Wenn Sie Qt Creator verwenden, wählen Sie „Qmake ausführen“ aus dem Projektkontextmenü.
-
Q_OBJECT-Makro: Bestätigen Sie, dass Sie das Q_OBJECT-Makro in Ihrer Klassendeklaration ordnungsgemäß verwendet haben. Es sollte vor allen Konstruktordefinitionen platziert werden.
-
Vererbung: Wenn diese Klasse zuvor nicht zum Qt-Metaobjektsystem gehörte (z. B. hatte sie kein Q_OBJECT-Makro oder wurde von einer anderen Klasse geerbt). ), führen Sie qmake erneut aus oder nehmen Sie geringfügige Änderungen an Ihrer Projektdatei vor, um einen qmake-Lauf auszulösen.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meiner Qt-Anwendung einen „Q_OBJECT-Verknüpfungsfehler: „undefinierter Verweis auf vtable''?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!