未定义的引用'vtable for MainWindow'

时间:2015-11-10 15:04:24

标签: c++ eclipse qt

我正在关注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();

这应该在我班上定义吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

尝试在项目上运行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

(我也在更新维基页面)