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 宏

    原因:未知

  • 相关阅读:
    浅谈管道模型(Pipeline)
    经常使用的webservice接口
    2012年终总结
    【Linux】linux经常使用基本命令
    php:兄弟连之面向对象版图形计算器1
    学习selenium所须要具备的技术
    Sftp和ftp 差别、工作原理等(汇总ing)
    对数据分布进行可视化的方法
    FusionCharts简单教程(一)---建立第一个FusionCharts图形
    闭包和柯里化
  • 原文地址:https://www.cnblogs.com/crazyghostvon/p/vtable_for_subClass.html
Copyright © 2011-2022 走看看