C++ Qt未定义对“vtable for Msnger';

C++ Qt未定义对“vtable for Msnger';,c++,qt,vtable,C++,Qt,Vtable,我得到这个错误 /.../mainwindow.o:-1: In function `MainWindow::MainWindow(QWidget*)': /.../mainwindow.cpp:-1: Chyba:undefined reference to `vtable for Msnger' 我不明白为什么。我发现导致此消息的唯一问题是没有定义的声明,并且我在代码中没有看到任何错误 这是班长 msnger.h: #include <QObject> class Msnge

我得到这个错误

/.../mainwindow.o:-1: In function `MainWindow::MainWindow(QWidget*)':
/.../mainwindow.cpp:-1: Chyba:undefined reference to `vtable for Msnger'
我不明白为什么。我发现导致此消息的唯一问题是没有定义的声明,并且我在代码中没有看到任何错误

这是班长 msnger.h:

#include <QObject>

class Msnger : public QObject
{
    Q_OBJECT

public:
    Msnger() {};
    ~Msnger() {};
    void sendOn();
signals:
    void ton() {};
};
Msnger应该向我的主窗口发送消息

在主窗口的构造函数中:

msn = new Msnger();
connect(msn, SIGNAL(ton()),this, SLOT(on()));
其中msn是:

public: Msnger * msn

你能解释一下是什么导致了这个问题,我怎样才能修复它吗?

你的编译器不太清楚

确保为定义了Msnger类的头文件运行。生成的moc_*cpp文件是用编译器编译的


注:当QObject继承的类名称以“Q”开头时,这是很好的,例如QMsnger,但不确定您的编译器

确保为定义了Msnger类的头文件运行。生成的moc_*cpp文件是用编译器编译的


注:当QObject继承的类名称以“Q”开头时是好的,例如QMsnger

您的问题是,
moc
没有在您的文件上运行,或者其结果没有得到链接

黄金法则是:

  • 确保所有
    QObject
    派生类的定义中都存在
    Q_对象
  • 确保仅在头文件中声明
    QObject
    派生类
  • 确保所有头文件都列在
    HEADERS=
    列表的.pro文件中
  • 每次将
    Q\u对象
    添加到某个类或修改
    .pro
    文件时,请运行
    qmake

  • 增编:

    signals:
        void ton() {};
    

    不要执行信号
    moc
    将为您实现它。

    您的问题是
    moc
    没有在您的文件上运行,或者其结果没有被链接

    黄金法则是:

  • 确保所有
    QObject
    派生类的定义中都存在
    Q_对象
  • 确保仅在头文件中声明
    QObject
    派生类
  • 确保所有头文件都列在
    HEADERS=
    列表的.pro文件中
  • 每次将
    Q\u对象
    添加到某个类或修改
    .pro
    文件时,请运行
    qmake

  • 增编:

    signals:
        void ton() {};
    

    不要执行信号
    moc
    将为您实现它。

    在哪里可以检查“生成的moc_*cpp文件是否使用我的编译器编译”?在我的项目文件夹中生成的唯一moc_uu文件是moc_umainWindow.cpp。这是正确的还是应该有moc_msnger.cpp?我在哪里可以检查“生成的moc_*cpp文件是否是用我的编译器编译的”?在我的项目文件夹中生成的唯一moc_uu文件是moc_umainWindow.cpp。这是正确的还是应该有moc_msnger.cpp?chyba是捷克语的错误词。“chyba”也是波兰语的“maybe”:)chyba是捷克语的错误词。“chyba”也是波兰语的“maybe”:)太棒了!THX qmake解决了这个问题。我觉得有一个问题,并尝试重建项目与QT的创造者。下次我先手动尝试qmake。构建菜单中有“runqmake”条目。太好了!THX qmake解决了这个问题。我觉得有一个问题,并尝试重建项目与QT的创造者。下次我先手动尝试qmake。在构建菜单中有“runqmake”条目。