Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QC++中如何解析C++中未定义的VTABLE引用_C++_Qt_Extend - Fatal编程技术网

QC++中如何解析C++中未定义的VTABLE引用

QC++中如何解析C++中未定义的VTABLE引用,c++,qt,extend,C++,Qt,Extend,通常,这样的错误可以通过运行QMake来解决。每当您创建一个从QObject派生的新类时,Qt的模型元对象编译器MOC都需要自动生成新类的元类的代码—QMake确保这种情况发生 如果您使用的是QtCreator,只需从Build菜单中选择RunqMake 您可能还必须运行cleanprojectx或cleanlall,也可以在Build菜单中找到 主运行中心可能喜怒无常,因此您需要执行以下操作: 在您的案例中,将QObject派生类移动到单独的源文件和头文件中,创建bot.h和bot.cpp,并

通常,这样的错误可以通过运行QMake来解决。每当您创建一个从QObject派生的新类时,Qt的模型元对象编译器MOC都需要自动生成新类的元类的代码—QMake确保这种情况发生

如果您使用的是QtCreator,只需从Build菜单中选择RunqMake

您可能还必须运行cleanprojectx或cleanlall,也可以在Build菜单中找到

主运行中心可能喜怒无常,因此您需要执行以下操作:

在您的案例中,将QObject派生类移动到单独的源文件和头文件中,创建bot.h和bot.cpp,并将类代码移动到其中 插槽代码的单独声明和定义将txt定义为bot.cpp中的bot::txt 在您的例子中,MOC生成一个对应的元类文件MOC_bot.cpp,当一个文件中有多个QObject派生类时,有时会感到困惑。最佳实践是为每个QObject派生类使用一个头文件和一个源文件


如果所有其他操作都失败,您可能需要删除项目的.pro.user文件,然后退出并重新启动Qt Creator。然后从“生成”菜单中,选择“全部清除”,运行qmake,全部重建。

问题仍然存在@SalamBoy尝试清理项目,见editI will,问题依然存在是的,谢谢Tony,但我为什么要把文件放到新的头上?@SalamBoy很高兴它成功了,这是商务部的一个怪癖,见edit
#include<QApplication>
#include<QDialog>
#include<QLabel>
#include <X11/Xlib.h>
#include<QVBoxLayout>
#include<iostream>
#include<QWidget>
#include<QPushButton>
#include <QThread>
#include <QGridLayout>
#include <QSplitter>
#include<QAbstractButton>
using namespace std;




class bot :  public QPushButton  {
   Q_OBJECT;

 public slots:
    void txt() {
        setText("hi");
         }


};


int main(int a , char * b[])
{
    QApplication application(a,b);
    QPushButton *button = new QPushButton();
    bot *l = new bot();
    button->setFixedSize(100,100);
    l->setText("sssssssssssssss");

    QVBoxLayout *ll  = new QVBoxLayout;
    ll->addWidget(l);
    ll->addWidget(button);
    QWidget x ;
    x.setLayout(ll);
    x.show();
    QObject::connect(button, SIGNAL(clicked()), l , SLOT( txt()) );

    return application.exec();


}
SOURCES += \
    sd.cpp
QT += widgets

FORMS += \
    form.ui