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」というファイルを含めることだけが機能することがわかっていますが、これは不正行為のようです。何が欠けているのか誰か知っていますか?