0

ProjectX と ProjectXTests の 2 つのプロジェクトを含む VC++ 2010 ソリューションがあります。現在の構成では、ProjectX は静的ライブラリとしてビルドされ、ProjectXTests は ProjectX のさまざまなメソッドをテストするための DLL としてビルドされます。現在、ProjectX には、次のように getUserName() メソッドを持つクラス User があります。

// User.h
public ref class User
{
    public:
       User(String^ userName);
       String^ getUserName();
    private:
       String^ userName;
};

コンストラクターとメソッドは User.cpp に実装されています。ProjectXTests には、たとえば getUserNameTest() メソッドで getUserName() メソッドをテストするクラス UserTests があります。UserTests.h で宣言され、UserTests.cpp で次のように実装されます。

// UserTests.cpp
#include "UserTests.h"
#include "User.h"

void UserTests::getUserNameTest()
{
    User^ testUser = gcnew User("name");
    Assert::AreEqual("name", testUser->getUserName());
}

ProjectXTests のプロジェクト プロパティ (Common Properties -> Framework and References) で、ProjectX への参照を追加しました。VC++ ディレクトリに、ヘッダー ファイルとライブラリ ファイル用の適切なディレクトリを追加しました。ソリューションをビルドすると、ヘッダー ファイル「User.h」が見つかります。ただし、リンクエラーが発生します

error LNK2020: unresolved token (06000005) User::getUserName

テストされている他のすべてのメソッドでも同じことが起こります。なぜこれが起こるのか分かりません。これまでのところ、「UserTests.cpp」に「User.h」の代わりに「User.cpp」というファイルを含めることだけが機能することがわかっていますが、これは不正行為のようです。何が欠けているのか誰か知っていますか?

4

1 に答える 1

0

どういうわけか、 のコードを含める必要がありProjectXますProjectXTests。これは、文字通り#includeディレクティブを使用して行うのではなく、ソース ファイルをプロジェクト ワークスペースに追加するのが最も簡単ProjectXですProjectXTests。動的ライブラリの静的として作成されている場合ProjectXは、代わりにそれをリンクします。

于 2012-08-27T07:03:24.440 に答える