Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
C++ 编译Qt hello World时对vtable的未定义引用_C++_Qt - Fatal编程技术网

C++ 编译Qt hello World时对vtable的未定义引用

C++ 编译Qt hello World时对vtable的未定义引用,c++,qt,C++,Qt,我设计了一个简单的窗口,只有一个按钮,并试图触发它。当我编译它的时候,我得到了一个错误,我真的不知道它是从哪里来的。当我编译一个简单的程序,但现在当我试图创建自己的图形用户界面使用QDesginer它不再工作。通常情况下,vtable错误意味着某些虚拟函数没有实现,但我不知道这是什么原因造成的。我在这里看过类似的问题,比如或,但这并没有真正的帮助 main.cpp #include <QtWidgets/qapplication.h> #include <QtWidgets/q

我设计了一个简单的窗口,只有一个按钮,并试图触发它。当我编译它的时候,我得到了一个错误,我真的不知道它是从哪里来的。当我编译一个简单的程序,但现在当我试图创建自己的图形用户界面使用QDesginer它不再工作。通常情况下,
vtable
错误意味着某些虚拟函数没有实现,但我不知道这是什么原因造成的。我在这里看过类似的问题,比如或,但这并没有真正的帮助

main.cpp

#include <QtWidgets/qapplication.h>
#include <QtWidgets/qpushbutton.h>

#include "main_frame.h"

class TestMainFrame : public QFrame
{
    Q_OBJECT

public:
    explicit TestMainFrame(QWidget *parent = 0);
    ~TestMainFrame();

private slots:
    void onTest();

private:
    Ui::MainFrameGUI *ui;
};

TestMainFrame::TestMainFrame(QWidget *parent) :
    QFrame(parent),
    ui(new Ui::MainFrameGUI)
{
    ui->setupUi(this);
}

TestMainFrame::~TestMainFrame()
{
    delete ui;
}

void TestMainFrame::onTest()
{
    printf("Test\n");
}

int main( int argc, char **argv )
{
    QApplication a(argc, argv);
    TestMainFrame w;
    w.show();

    return a.exec();
}
build.log

d:\opt\qt-5.2.1\bin\uic.exe -g cpp -o d:\src\c\QTFrameQML\main_frame.h d:\src\c\QTFrameQML\main_frame.ui
g++.exe -std=c++11 -Wall -g -ID:\opt\qt-5.2.1\include -c d:\src\c\QTFrameQML\main.cpp -o Debug\obj\main.o
g++.exe -LD:\opt\qt-5.2.1\lib -o Debug\QTFrameQML.exe Debug\obj\main.o   -lgdi32 -luser32 -lkernel32 -lcomctl32 -lQt5Core -lQt5Gui -lGLESv2d -lQt5Widgetsd -mwindows
Debug\obj\main.o: In function `ZN13TestMainFrameC2EP7QWidget':
d:/src/c/QTFrameQML/main.cpp:23: undefined reference to `vtable for TestMainFrame'
d:/src/c/QTFrameQML/main.cpp:23: undefined reference to `vtable for TestMainFrame'
Debug\obj\main.o: In function `ZN13TestMainFrameD2Ev':
d:/src/c/QTFrameQML/main.cpp:28: undefined reference to `vtable for TestMainFrame'
d:/src/c/QTFrameQML/main.cpp:28: undefined reference to `vtable for TestMainFrame'
collect2.exe: error: ld returned 1 exit status

这通常是一个依赖性问题,其中moc编译器由于已经存在的对象文件而未被调用。尝试清理您的环境并再次启动qmake。希望这有助于不要在cpp文件中使用Q_对象宏,除非您想手动运行moc。。。只需将您的类定义移动到main.h,将其包含在源代码中,然后重新运行qmake->works

您是否在此项目上运行了
qmake
?顺便说一句,你能把项目文件也显示出来吗?我不使用qmake。我用明文W64编译QT开源软件,并在CODBROCK中创建了一个普通C++项目。正如我所说,当我编译一个简单的hellow world时,只要显示一个按钮,它就会工作。只有当我尝试开始使用这样的窗口时,才会出现此错误。您需要处理main.cpp。我不知道在windows上是怎么做的。在linux上,它是像
moc main.cpp
@Devolus一样完成的,如果不使用qmake,如何创建moc文件?简单的hellowworld应用程序可能不需要mocables,它当然可以工作。我不知道我也必须使用
moc
编译器,所以我将看看这个。谢谢你的提示。我没有使用qmake,但我错过的信息是,当使用Qt宏时,我必须使用
moc
处理
.h
文件。现在它起作用了。
d:\opt\qt-5.2.1\bin\uic.exe -g cpp -o d:\src\c\QTFrameQML\main_frame.h d:\src\c\QTFrameQML\main_frame.ui
g++.exe -std=c++11 -Wall -g -ID:\opt\qt-5.2.1\include -c d:\src\c\QTFrameQML\main.cpp -o Debug\obj\main.o
g++.exe -LD:\opt\qt-5.2.1\lib -o Debug\QTFrameQML.exe Debug\obj\main.o   -lgdi32 -luser32 -lkernel32 -lcomctl32 -lQt5Core -lQt5Gui -lGLESv2d -lQt5Widgetsd -mwindows
Debug\obj\main.o: In function `ZN13TestMainFrameC2EP7QWidget':
d:/src/c/QTFrameQML/main.cpp:23: undefined reference to `vtable for TestMainFrame'
d:/src/c/QTFrameQML/main.cpp:23: undefined reference to `vtable for TestMainFrame'
Debug\obj\main.o: In function `ZN13TestMainFrameD2Ev':
d:/src/c/QTFrameQML/main.cpp:28: undefined reference to `vtable for TestMainFrame'
d:/src/c/QTFrameQML/main.cpp:28: undefined reference to `vtable for TestMainFrame'
collect2.exe: error: ld returned 1 exit status