0

我有一个包含两个项目的 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”,但这似乎是作弊。有人知道我可能会错过什么吗?

4

1 回答 1

0

Somehow you have to include the code from ProjectX in ProjectXTests. This is not done by literally using the #include directive, instead the simplest is to add the source files from ProjectX to the ProjectXTests project workspace. If ProjectX is made as a static of dynamic library, then link with that instead.

于 2012-08-27T07:03:24.440 回答