【发布时间】:2013-11-22 01:50:33
【问题描述】:
我收到此错误,但我不知道如何解决。
我使用的是 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;
}
我是初学者;这是一个简单的程序,它运行没有错误。 上网看了一下,对单元测试产生了兴趣,于是创建了一个测试项目:
菜单文件 → 新建 → 项目... → 已安装 → 模板 → Visual C++ → 测试 → 原生单元测试项目 →
名称: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" 替换它吗?
【问题讨论】:
-
小心在 Windows 环境中,静态库的文件扩展名为
.LIB。使事情复杂化...动态链接库(即*.DLL)可以有一个附带的导入库,它也有一个.LIB文件扩展名。这个导入库列出了*.DLL提供的所有好东西。更多信息请阅读:Beginner's Guide to Linkers -
他为什么要小心??
标签: c++ testing error-handling lnk2019