2017-10-01 37 views
1

最近、Q_OBJECTマクロと自己定義シグナルを含むクラスのユニットテスト(googletestを使用)を作成しようとしました。Qtサブプロジェクトがmocファイルを見つけることができません

"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) 
+0

どのQtバージョンで作業していますか? Qt 6より前に廃止されたものはすべて無効にしました(まだリリースされていません...)これはあなたの問題に関連する可能性があります。 – Felix

+0

@Felix私はQt 5.9を使用しています。その行を削除しても問題は解決されません。 – PMMA

+0

'Class'のコードを見せてください – Felix

答えて

0

プロジェクトは、私は同じことを持っていました問題。 Qtのmocsにテストプロジェクトのsrcヘッダがあることを確認するためには、テストプロジェクトの.proファイルにも記述する必要があります。したがって、次のようなものを追加します。

HEADERS += (dependent src headers) 

すべてのsrcヘッダーが必要な場合は、共通の.priファイルに抽出できます。

関連する問題