• qt undefined reference to `vtable for subClass'


    1. 建立一个console工程

    QT -= gui
    
    CONFIG += c++11 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.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 = 0);
        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 = 0);
        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:14: error: undefined reference to `vtable for subClass'
    
    collect2: error: ld returned 1 exit status

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

    原因:未知

  • 相关阅读:
    SSDB安装配置记录
    Ubuntu上通过nginx部署Django笔记
    PyCharm创建virtualenv方法
    Python3--列表生成式
    K最近邻算法项目实战
    K最近邻算法
    人工智能之机器学习
    C#把汉字转换成16进制(HEX)并向串口发送数据
    Ubuntu-18.04.2系统 Nginx+uWSGI+Django 部署生产环境
    HTTP响应状态码说明
  • 原文地址:https://www.cnblogs.com/crazyghostvon/p/vtable_for_subClass.html
Copyright © 2020-2023  润新知