C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 继承自QObject后,Qt“发出未定义的参考错误信号”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近需要向类添加一个信号,所以我将类更改为继承自QObject并将Q_OBJECT宏添加类定义中.由于这样做,我在下面的类别行中得到“’vtable for CLICommand’”信号未定义的引用错误
// File clicommand.h
#include <QString>
#include <QStringList>
#include <QTcpSocket>
#include "telnetthread.h"
class CLICommand : public QObject
{
Q_OBJECT
public:
    CLICommand(TelnetThread *parentTelnetThread);
signals:
    void signal_shutdown_request(); 
private:
    TelnetThread *m_parentTelnetThread;

第二个错误“在’vtable for CLICommand”上发出未定义的引用错误信号”在下面一行(初始化成员变量):

// File clicommand.cpp
#include <QDebug>
#include <QTcpSocket>
#include <QTextStream>
#include "version.h"
#include "clicommand.h"
#include "telnetthread.h"
#include "logger.h"
CLICommand::CLICommand(TelnetThread *parentTelnetThread)
  : m_parentTelnetThread(parentTelnetThread)
{
}

在这里我发出信号的地方. emit行生成对`CLICommand :: signal_shutdown_request()’的错误未定义引用:

// file shutdown_clicommand.cpp
#include <QIODevice>
#include "clicommand.h"
#include "logger.h"
#include "version.h"
void CLICommand::execute_shutdown(const QStringList &commandLineFragments)
{
    emit signal_shutdown_request();
}

我已经阅读了很多关于这个主题的帖子,但似乎都没有适用.我甚至尝试过清洁/重建.我没有使用boost或其他库…只是QT 5

有人能告诉我我做错了什么吗?

解决方案:在QT Creator中,右键单击项目,选择RUN QMAKE,然后重建所有项目.关于运行REBUILD ALL的其他帖子是不正确的……它本身就不会运行qmake.

解决方法

您需要确保(重新)运行“moc”以进行这些更改.您似乎错过了生成的moc文件,或者它已过时,因此不包含对当前状态的正确引用.

添加Q_OBJECT宏时,QtCreator不会正确重新运行qmake.这是一个长期存在的问题,因此您需要手动重新运行它.

https://bugreports.qt.io/browse/QTCREATORBUG-231

大佬总结

以上是大佬教程为你收集整理的c – 继承自QObject后,Qt“发出未定义的参考错误信号”全部内容,希望文章能够帮你解决c – 继承自QObject后,Qt“发出未定义的参考错误信号”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: