【问题标题】:Qt: undefined reference to `vtable forQt:未定义的对`vtable的引用
【发布时间】:2016-01-07 22:15:29
【问题描述】:

当我尝试编译我的程序时,我得到了错误

obj/backgroundWorker.o: In function `BackgroundWorker':
.../backgroundWorker.cpp:6: undefined reference to `vtable for BackgroundWorker'
obj/backgroundWorker.o: In function `~BackgroundWorker':
.../backgroundWorker.cpp:14: undefined reference to `vtable for BackgroundWorker'

我已经找到了很多导致此错误的原因,但到目前为止,我还找不到 解决我的代码中的问题:

backgroundWorker.hpp

#include <QObject>
#include <QPushButton>

class BackgroundWorker : public QWidget{

    Q_OBJECT

    public:
        explicit BackgroundWorker();
        ~BackgroundWorker();

        private slots:
            void start();

    private:
        QPushButton* mStartButton;
};

backgroundWorker.cpp

#include <iostream>
#include "getInput.hpp"
#include "backgroundWorker.hpp"
#include "LIF_network.hpp"

BackgroundWorker::BackgroundWorker(){
    mStartButton = new QPushButton("Start",this);
    mStartButton->setGeometry(QRect(QPoint(100,100),QSize(200,50)));

    connect(mStartButton, SIGNAL(released()), this, SLOT(start()));
}

BackgroundWorker::~BackgroundWorker(){
    delete mStartButton;
}

void BackgroundWorker::start(){
    //stuff not related to qt
}

ma​​in.cpp

#include <QApplication>
#include "backgroundWorker.hpp"

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    BackgroundWorker bw;
    return a.exec();
}

** .pro 文件**

CONFIG += qt debug c++11
QT += widgets

QMAKE_CC = clang++
QMAKE_CXX = clang++
QMAKE_CXXFLAGS += -Wall -Werror -O3
Headers += image.hpp \
            getInput.hpp \
            LIF_network.hpp \
            backgroundWorker.hpp \

SOURCES += main.cpp \
            image.cpp \
            getInput.cpp \
            LIF_network.cpp \
            backgroundWorker.cpp \


OBJECTS_DIR = ./obj

【问题讨论】:

  • 应该是大写的:HEADERS
  • 这解决了我的问题。但它已经工作了,当我添加一些 Qt 库函数时它就停止工作了。这就是为什么我什至没有想过它
  • 你不需要在析构函数中删除 mSmartButton。由于您在构造函数中将“this”作为父对象传递,因此它将为您删除。

标签: c++ qt qmake moc


【解决方案1】:

正如 Frank Osterfeld 在评论中提到的,变量的正确名称是大写的 HEADERS。它应该包含所有包含Q_OBJECT 宏的标题列表

这是必需的,因为 qmake 需要知道要提供给 moc 的头文件列表。

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2012-08-14
    相关资源
    最近更新 更多