在 qt 控制台应用程序中未定义对 'vtable for myObj' 的引用 - 信号和插槽
undefined reference to `vtable for myObj' in qt console application - signals and slots
我需要从QProcess捕获发射的信号以进行测试。
由于我使用的是控制台应用程序,因此我决定在我的主文件中创建一个名为 myObj
的类.cpp主要使用以下示例:
#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:错误:未定义对"vtable for myObj"的引用
main.cpp:81:错误:未定义对"vtable for myObj"的引用
我已经查看了许多SO页面,例如此处,此处和此处以及其他各种页面,但没有找到解决方案
我尝试/做过:
- 添加了Q_Object宏
- 冉冉
- 重建
- 已检查 #include
.pro 文件
QT += core
QT -= gui
CONFIG += c++11
TARGET = serv_app
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
有什么建议吗?
您有两个选择:
- @eyllanesc解决方案肯定有效。
- 在函数之前或之后添加行
#include "main.moc"
main()
。
当您将类放入其自己的头文件中时,qmake
将生成正确的moc
文件。
但是当你把类放到一个.cpp
文件中时,除非你把我之前说的那行放进去,否则不会生成moc
代码。
更新 #1
在关于编写单元测试的Qt教程中,我们可以找到以下信息:
注意,如果既声明又实现我们的测试 类都在一个.cpp文件中,我们还需要包含生成的 MOC 文件以使Qt的内省工作。
所以这是我们需要包含moc
文件的另一个例子。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在 qt 控制台应用程序中未定义对 'vtable for myObj' 的引用 - 信号和插槽