C++ cli visualc&x2B+;2010年:“未解析令牌”;LNK2020

C++ cli visualc&x2B+;2010年:“未解析令牌”;LNK2020,c++-cli,token,linker-errors,C++ Cli,Token,Linker Errors,我有一个VC++2010解决方案,包含两个项目:ProjectX和ProjectXTests。在当前配置中,ProjectX构建为静态库,ProjectXTests构建为DLL,用于测试ProjectX中的各种方法。现在,在ProjectX中,我有一个类User,其方法为getUserName(),如下所示: // User.h public ref class User { public: User(String^ userName); String^ ge

我有一个VC++2010解决方案,包含两个项目:ProjectX和ProjectXTests。在当前配置中,ProjectX构建为静态库,ProjectXTests构建为DLL,用于测试ProjectX中的各种方法。现在,在ProjectX中,我有一个类User,其方法为getUserName(),如下所示:

// User.h
public ref class User
{
    public:
       User(String^ userName);
       String^ getUserName();
    private:
       String^ userName;
};
构造函数和方法在User.cpp中实现。在ProjectXTests中,我有一个类UserTests,它测试getUserName()方法,比如getUserNameTest()方法。它在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的项目属性(公共属性->框架和引用)中,我添加了对ProjectX的引用。在VC++目录中,我为头文件和库文件添加了相应的目录。构建解决方案时,会找到头文件“User.h”。但是,我得到一个链接错误

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

所有其他正在测试的方法也会发生同样的情况。我就是不明白为什么会这样。到目前为止,我发现唯一有效的方法是在“UserTests.cpp”中包含文件“User.cpp”而不是“User.h”,但这似乎是作弊。有人知道我可能遗漏了什么吗?

不知何故,您必须将
ProjectX
中的代码包含在
ProjectXTests
中。这不是通过直接使用
#include
指令来实现的,最简单的方法是将
ProjectX
中的源文件添加到
ProjectXTests
项目工作区。如果将
ProjectX
设置为静态或动态库,则改为链接到该库。

我看到了“类用户”的类定义,其中包含一个方法“String^getUserName()”。您曾经给出过实现吗?如前所述,方法(和类构造函数)都是在User.cpp中实现的,是的。:)好的,将ProjectX中的源文件添加到ProjectXTests项目是可行的。ProjectX是作为一个静态库制作的,所以我的目标是您的第二个解决方案。如何使我的测试项目链接到我的静态库?@Nikolay在项目设置中,您有一个可选的
链接器
,可以将库添加为依赖项。但是,如果两个项目都在同一个工作区中,我认为您应该能够将其添加为引用,或者只需将其拖动到项目树中即可。我已经有一段时间没有使用VisualStudio了,所以我不确定具体细节。但之前这里已经给出了答案,所以你可以搜索一下,或者在谷歌上找到答案。然而,现在仔细查看,我注意到在链接器选项下,有一个附加的库目录。我想我认为把我的库目录添加到VC++目录就足够了,但是现在一切都正常了。谢谢!