qt undefined reference to `vtable for subClass'

时间:2023-04-09 19:06:38

1. 建立一个console工程

QT -= gui

CONFIG += c++ console
CONFIG -= app_bundle # The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0. SOURCES += \
main.cpp \
baseclass.cpp \
subclass.cpp # Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target HEADERS += \
baseclass.h \
subclass.h

2. 添加baseClass

baseclass.h

#ifndef BASECLASS_H
#define BASECLASS_H #include "QObject" class baseClass: public QObject
{
Q_OBJECT public:
baseClass(QObject * p = );
virtual ~baseClass() {} signals:
void signal1(); }; #endif // BASECLASS_H

baseClass.cpp

#include "baseclass.h"

baseClass::baseClass(QObject * p) : QObject(p)
{ }

subclass.h

#ifndef SUBCLASS_H
#define SUBCLASS_H #include "baseclass.h" class subClass: public baseClass
{
Q_OBJECT public:
subClass(QObject * p = );
virtual ~subClass() {}; //signals:
void signal2(); }; #endif // SUBCLASS_H

subclass.cpp

#include "subclass.h"

subClass::subClass(QObject * p) : baseClass (p)
{ }

main.cpp

#include <QCoreApplication>
#include "subclass.h" int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); subClass * sub = new subClass(); return a.exec();
}

编译报错:

testQtSignalBug/subclass.cpp:: error: undefined reference to `vtable for subClass'

collect2: error: ld returned  exit status

解决办法:注释掉subclass.h里的Q_OBJECT 宏

原因:未知