【发布时间】:2017-10-01 16:23:22
【问题描述】:
我最近尝试为一个包含 Q_OBJECT 宏和自定义信号的类编写单元测试(使用 googletest)。测试子项目将无法编译(即使在重建/删除所有内容之后)并出现以下链接器错误:
"error: undefined reference to `vtable for Class'"
和
"error: undefined reference to `vtable for Class::signal()'"
我的 src 子项目编译得很好。在研究了这个问题后,我猜问题是编译器没有为测试子项目生成 moc 文件。我也没有成功将 src 子项目的 moc 文件包含在测试中。我该如何解决这个问题?
这是我的 .pro 文件:
项目 .pro 文件
TEMPLATE = subdirs
CONFIG(debug, debug|release) {
SUBDIRS += \
src \
test
test.depends = src
} else {
SUBDIRS += \
src
QMAKE_CXXFLAGS += -O2
}
src.pro
QT += core gui charts widgets
TARGET = Project name
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
HEADERS += \
...
SOURCES += \
...
test.pro
include(gtest_dependency.pri)
QT += core
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG += thread
CONFIG += qt
INCLUDEPATH += $$PWD/../src
DEPENDPATH += $$PWD/../src
HEADERS += \
... (only test headers)
SOURCES += \
... (test and src source files)
【问题讨论】:
-
您使用的是哪个 Qt 版本?您禁用了 Qt 6 之前已弃用的所有内容(尚未发布...)这可能与您的问题有关。
-
@Felix 我正在使用 Qt 5.9。删除该行并不能解决问题。
-
请告诉我们
Class的代码,也许你在那里遗漏了什么
标签: qt