我正在使用来设置一些单元测试。我有三个解决方案:
我将FN_test设置为FN和gtest作为引用(依赖项),然后我认为我已经准备好设置测试(我已经将每个人设置为/MTd (不这样做会导致我在之前链接错误)。
特别是,我在FN中定义了一个名为test的类,我希望使用FN_test进行测试。到现在为止还好。因此,我使用googletest编写一个名为EmbarkTest的类,声明一个成员登*并在构造函数中写入:
EmbarkTest() {
e = new Embark(900,2010);
}然后,按下F7,我得到以下内容:
1>FN_test.obj : error LNK2019: unresolved external symbol "public: __thiscall Embark::Embark(int,int)" (??0Embark@@QAE@HH@Z) referenced in function "protected: __thiscall EmbarkTest::EmbarkTest(void)" (??0EmbarkTest@@IAE@XZ) 1>D:\Users\lg\Product\code\FN\Debug\FN_test.exe : fatal error LNK1120: 1 unresolved externals
有人知道我做错了什么和/或我能做些什么来解决这个问题吗?
编辑:Embark.h中的相关代码
class Embark
{
public:
//Constructor for initial state
Embark(int _id, int _year);
//Destructor
~Embark();
/* ... */
}发布于 2010-03-25 12:55:15
我发现答案相当简单。经过两天的猛烈打击,是这样的:
您必须将您的主要项目编译为.lib 而不是 .exe
在这样做之后,所有的链接都变成了一种幸福。我认为Visual会自动为我做到这一点,因为我从FN_test中声明了对FN的依赖:我假设Visual会创建库。事实并非如此。
RANT (无需在此之后阅读)
由于很难将一个使可执行文件的项目链接到另一个执行相同的项目,因此在这类问题上找到引用有点困难。谷歌搜索没有给我带来任何有用的结果。MSDN论坛也无济于事。
但是,当您在应用程序上进行单元测试时,在同一解决方案上发生这种情况(例如,测试项目和应用程序项目)是否很常见?我对C++的其他测试框架一无所知。我选择了Google测试框架,用于:
但是,它对一体化并没有多大的好处。我认为其他工具将更好地集成到Visual,包括IDE响应。但我宁愿现在就受苦,而不是事后。我希望这个工具不断改进,因为我喜欢它。
发布于 2010-03-24 12:39:12
链接器找不到Embark构造函数的定义。
发布于 2010-03-24 12:41:01
链接器找不到Embark::Embark(int, int)
以下是MSDN对错误LNK2019的看法。
https://stackoverflow.com/questions/2507595
复制相似问题