0

ソースコードを含むプロジェクトと、同じソリューション内の TestProject があります。

TestProject で GTest フレームワークを使用するテスト ファイルは、メイン プロジェクトから#includeヘッダー ファイルを取得しています。Composite.h

最初の GTest の本体で、Composite.h. この行は、Composite クラスの各プライベート メソッドでコンパイル エラー LNK2001: unresolved external symbol を返します。

myTest.cppファイル内のコードは次のようになります

#include "Composite.h"

TEST(testComposite, testCase1)
{
    Composite c;  // error LNK2001
    // my test here;
}

このインスタンス化の何が問題になっていますか?

編集

Composite クラスのプライベート メソッドの実装を含むライブラリにリンクしました。また、代わりに、このクラスのソース コードの .cpp を #inlcude しようとしました。どちらのソリューションでも問題は解決しません。

編集 -- 質問

これは、複合クラスとその親クラス (Q_OBJECT定義済み) の moc ファイルを含むフォルダーが表示されていない可能性がありますか?

テスト プロジェクトのプロパティの追加のディレクトリに、moc ファイルを含むフォルダーを追加してみました。これもうまくいきません。

4

2 に答える 2

1

インスタンス化に問題はありません。不足しているコードまたは未解決のコードを含む Composite.cpp があると思います。

この Composite.cpp をプロジェクトに追加するか、Composite.cpp を含むライブラリにアプリケーションをリンクする必要があります。

于 2014-04-04T09:12:02.577 に答える
1

インクルードは、プログラムのリンクとは関係ありません。何を含めるかはコンパイルにとって重要であり、それはリンケージの前に発生します。ここに示す問題を解決するには、言及したプライベート メソッドの実装を含むもの (オブジェクト ファイル、ライブラリ) とリンクする必要があります。

于 2014-04-04T09:04:33.087 に答える