我有一个包含两个项目的 VC++ 2010 解决方案:ProjectX 和 ProjectXTests。在当前配置中,ProjectX 构建为静态库,ProjectXTests 构建为 DLL,旨在测试 ProjectX 中的各种方法。现在,在 ProjectX 中,我有一个带有方法 getUserName() 的 User 类,如下所示:
// User.h
public ref class User
{
public:
User(String^ userName);
String^ getUserName();
private:
String^ userName;
};
构造函数和方法在 User.cpp 中实现。在 ProjectXTests 中,我有一个类 UserTests,除其他外,它在 getUserNameTest() 方法中测试 getUserName() 方法。它在 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.cpp”而不是“User.h”,但这似乎是作弊。有人知道我可能会错过什么吗?