zoukankan      html  css  js  c++  java
  • 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 宏

    原因:未知

  • 相关阅读:
    [BZOJ3510][洛谷P4299]首都(LCT)
    [luogu P5325][模板]Min_25筛
    [洛谷P3288][SCOI2014][BZOJ3597]方伯伯运椰子(网络流+图论)
    [洛谷P5342][TJOI2019]甲苯先生的线段树(数位dp)
    [CQOI2012][洛谷P3159][BZOJ2668]交换棋子(网络流+图论)
    [SDOI2015]约数个数和(莫比乌斯反演)
    使用Visual Studio 2005扩展创建Windows SharePoint Services 3.0 Web Part
    C#操作xml文件
    实用JS代码
    ASP.NET分页存储过程自定义用户控件(转)
  • 原文地址:https://www.cnblogs.com/crazyghostvon/p/vtable_for_subClass.html
Copyright © 2011-2022 走看看