gpt4 book ai didi

c++ - qt - 在 qt 控制台应用程序 - 信号和槽中未定义对 `vtable for myObj' 的引用

转载 作者:行者123 更新时间:2023-11-30 02:27:22 25 4
gpt4 key购买 nike

出于测试目的,我需要从 QProcess 捕获发出的信号。

因为我使用的是控制台应用程序,所以我决定在我的 main.cpp 文件中创建一个名为 myObj 的类,主要使用 this example :

#include <QCoreApplication>
#include <QLoggingCategory>
#include <QTextStream>
#include <QProcess>
#include <QString>
#include <QVariant>
#include <QDebug>
#include <QObject>

class myObj : public QObject
{

Q_OBJECT

public:
myObj(QObject *parent = 0);
// virtual ~Communicate();
~myObj();

public slots:
void registerFinished(int signal);
void registerAboutToClose();
void registerChannelReadyRead(int signal);
void registerReadChannelFinished();
void registerReadyRead();
void registerReadyReadStandardOutput();
void registerStarted();
};

myObj::myObj(QObject *parent)
: QObject(parent) <--- LINE 72 Error
{

}

//virtual myObj::~Communicate(){

//}

myObj::~myObj(){ <--- LINE 81 Error

}

void myObj::registerFinished(int signal){
qDebug() << "exit code = " << QString::number(signal);
}
void myObj::registerAboutToClose(){
qDebug() << "aboutToClose";
}
void myObj::registerChannelReadyRead(int signal){
qDebug() << "channelReadyRead = " << QString::number(signal);
}
void myObj::registerReadChannelFinished(){
qDebug() << "readChannelFinished";
}
void myObj::registerReadyRead(){
qDebug() << "exit code";
}
void myObj::registerReadyReadStandardOutput(){
qDebug() << "exit code";
}
void myObj::registerStarted(){
qDebug() << "started";
}

myObj *myO;

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

myO = new myObj();

//....
}

问题:

main.cpp:72: error: undefined reference to `vtable for myObj'

main.cpp:81: error: undefined reference to `vtable for myObj'

我看过很多 SO 页面,例如 hereherehere和其他各种,还没有找到解决方案

我已经尝试/完成了:

  • 添加了 Q_Object 宏
  • 运行 qmake
  • 重建
  • 检查#include

.pro 文件

QT += core
QT -= gui

CONFIG += c++11

TARGET = serv_app
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

有什么建议吗?

最佳答案

你有两个选择:

  • @eyllanesc 解决方案肯定有效。
  • main() 函数之前或之后添加行 #include "main.moc"

当您将类放入其自己的头文件中时,qmake 将生成正确的 moc 文件。

但是当你把这个类放到一个.cpp文件中时,moc代码是不会生成的,除非你把我之前说的那行放在里面。

更新#1

Qt tutorial about writing a Unit Test我们可以找到以下信息:

Note that if both the declaration and the implementation of our test class are in a .cpp file, we also need to include the generated moc file to make Qt's introspection work.

所以这是我们需要包含 moc 文件的另一个示例。

关于c++ - qt - 在 qt 控制台应用程序 - 信号和槽中未定义对 `vtable for myObj' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com