我得到了这个错误,但我不知道如何修复它。
我正在使用Visual Studio 2013。我将解决方案命名为MyProjectTest,这是我的测试解决方案的结构:
-function.h
#ifndef MY_FUNCTION_H
#define MY_FUNCTION_H
int multiple(int x, int y);
#endif
-function.cpp
#include "function.h"
int multiple(int x, int y){
return x*y;
}
-main.cpp
#include <iostream>
#include <cstdlib>
#include "function.h"
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << multiple(a, b) << endl;
system("pause");
return 0;
}
我是一个初学者;这是一个简单的程序,它运行没有错误。我在互联网上阅读并对单元测试产生了兴趣,因此我创建了一个测试项目:
菜单文件→新建→项目...→Installed→Templates→Visual→本机单元测试项目→
姓名: UnitTest1
解决方案:添加到解决方案
然后位置自动切换到当前打开的解决方案的路径。
这是解决方案的文件夹结构:
我只编辑了文件unittest1.cpp
#include "stdafx.h"
#include "CppUnitTest.h"
#include "../MyProjectTest/function.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestEqual)
{
Assert::AreEqual(multiple(2, 3), 6);
// TODO: Your test code here
}
};
}
但我得到了:
错误LNK2019:无法解析外部符号。
我知道缺少函数multiple的实现。我尝试删除function.cpp文件,并将声明替换为定义,然后它就运行了。但不推荐在同一文件中同时编写声明和定义。
如果不这样做,我如何修复这个错误?我应该在unittest.cpp文件中用#include "../MyProjectTest/function.cpp"
替换它吗?
发布于 2013-11-10 13:47:48
一种选择是在您的UnitTest1
项目中包含function.cpp
,但这可能不是最理想的解决方案结构。对您的问题的简短回答是,在构建UnitTest1
项目时,编译器和链接器不知道function.cpp
的存在,也无法链接包含multiple
定义的内容。解决这个问题的一种方法是使用链接库。
由于您的单元测试位于不同的项目中,因此我假设您的意图是使该项目成为一个独立的单元测试程序。由于您正在测试的函数位于另一个项目中,因此可以将该项目构建为动态或静态链接库。静态库在构建时链接到其他程序,扩展名为.lib
;动态库在运行时链接,扩展名为.dll
。对于我的答案,我更喜欢静态库。
您可以通过在项目属性中更改第一个程序来将其转换为静态库。在General选项卡下应该有一个选项,其中项目设置为build to an executable (.exe
)。您可以将其更改为.lib
。.lib
文件将构建到与.exe
相同的位置。
在UnitTest1
项目中,您可以转到其属性,并在链接器选项卡下的其他库目录类别中,添加MyProjectTest
生成的路径。然后,对于链接器-输入选项卡下的其他依赖项,添加静态库的名称,很可能是MyProjectTest.lib
。
这应该允许您的项目进行构建。请注意,通过这样做,MyProjectTest
将不是一个独立的可执行程序,除非您根据需要更改其构建属性,这将不太理想。
发布于 2013-11-10 13:09:20
在Visual Studio解决方案树中,右键单击项目“UnitTest1”,然后添加→Existing item→选择文件../MyProjectTest/function.cpp。
发布于 2015-06-05 21:17:56
由于我希望将我的项目编译为独立的EXE文件,因此我将UnitTest项目链接到从function.cpp生成的function.obj文件,它就可以工作了。
右键单击'UnitTest1‘项目→Configuration Properties→Linker→Input→Additional Dependencies→add "..\MyProjectTest\Debug\function.obj“。
https://stackoverflow.com/questions/19886397
复制相似问题