【问题标题】:undefined reference to `vtable for MainWindow'未定义对“主窗口的 vtable”的引用
【发布时间】:2018-08-21 00:15:19
【问题描述】:

我正在关注Qt's guide,因为我使用了QPushButton

我完全按照指南的建议进行操作,但出现编译错误:

./src/mainwindow.o: In function `MainWindow::MainWindow(QWidget*)':
mainwindow.cpp:(.text+0x1d): undefined reference to `vtable for MainWindow'
./src/mainwindow.o:mainwindow.cpp:(.text+0x25): more undefined references to `vtable for MainWindow' follow
collect2: error: ld returned 1 exit status
make: *** [HelloWorldProj] Error 1

我尝试添加一个析构函数:

~MainWindow(){};

但问题仍然存在。

我没有声明任何虚函数,除了QMainWindow(我继承的类)中的一个函数:

virtual QMenu *createPopupMenu();

这应该在我的课堂上定义吗?

【问题讨论】:

  • Q_OBJECT 添加到您的类声明中,运行 qmake 并再次构建。
  • 我有一个Q_OBJECTclass MainWindow : public QMainWindow { Q_OBJECT...}
  • 改进你的问题。
  • 我的确切代码就像链接的网站。我没有什么可以添加到我的问题...
  • 我已经更新了网站上的示例,以包含示例运行所需的 pro 文件。

标签: c++ eclipse qt


【解决方案1】:

您需要在我们的 CMake 文件中将 CMAKE_AUTOMOC 设置为 ON

# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)

“AUTOMOC 目标属性控制 cmake 是否检查目标中的 C++ 文件以确定它们是否需要运行 moc,并创建规则以在适当的时间执行 moc。” - Reference

【讨论】:

    【解决方案2】:

    尝试在项目上运行 qmake,然后重新构建。

    您的示例已损坏(如果可能,我会尽快更新)

    创建一个空文件并将其命名为 PushButtonExample.pro 并添加以下内容:

    QT       += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = PushButtonExample
    TEMPLATE = app
    
    SOURCES += main.cpp \
        mainwindow.cpp
    
    HEADERS  += mainwindow.h
    

    然后在该文件上运行qmake,然后运行make

    我还建议您下载 Qt Creator 并将其用作构建 Qt 项目时的 IDE。大多数 Qt 安装还安装了 Qt Creator IDE,它有一些很好的示例和向导来创建新项目。

    确保所有 4 个文件都在同一个文件夹中

    main.cpp
    mainwindow.cpp
    mainwindow.h
    PushButtonExample.pro
    

    在命令行中,导航到该文件夹​​并运行 qmake

    qmake PushButtonExample.pro
    

    这应该在同一文件夹中创建以下文件

    Makefile
    

    然后运行make

    这应该构建示例,并最终运行应用程序:

    ./PushButtonExample
    

    (我也在更新wiki页面)

    【讨论】:

    • 我试过qmake HelloWorldProj(这是项目的名称),但我得到的是Cannot find file: HelloWorldProj.
    • qmake HelloWorldProj.pro
    • 你需要一个 *.pro 文件,然后在上面运行 qmake,如果你没有 *.pro 文件,那么还有其他问题。查看@KernelPanic 的评论
    • 现在得到Cannot find file: HelloWorldProj.pro.
    • 我找不到HelloWorldProj.pro。只有HelloWorldProj 文件夹,里面有DebugReleasesrc。在 DebugRelease 中有 makefiles
    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多