VS2017 LNK2019:无法解析的外部符号解决方案

最近在学C++的模板类,遇到了LNK2019这个坑。于是乎就想要记录下来。

原因

此处参照Google上提供的提供的几种可能原因

[0]出现无法解析可能是因为lib文件不正确,比如64位的编译配置,结
使用的是32位的lib包.

[1]只写了类声明,但还没有写实现类,造成调用时无法解析

[2]声明和定义没有统一,造成链接不一致,无法解析

[3]没有在项目属性页的链接器的命令行选项加入相应的类包。

[4]没有在c++包含目录和库目录加入相应的类包路径

[5]在测试工程中被测文件目录可能需要包含被测类的cpp定义文件

[6]ICE接口测试时,无法解析可能因为被测文件没有包含进相关的cpp
件,另外,在TestSuite_ProjectRun.h文件中需要包
IProjectRun.h头文件,及相关的头文件(举例)。

[7]import相关的无法解析内容,解决办法是在链接器的依赖项中加入
应的动态库

[8]出现如下错误的原因一般是动态库没有包进来。imp
ProjectRun.obj : error LNK2019: 无法解析的外部符号
impStartHistoryLocalModule,该符号在函数 “protected:
virtual int
thiscall HiRTDB::CProjectRun::DoStar
(void)” (?DoStart@CProjectRun@HiRTDB@@MAEHXZ) 中被引用

[9]error LNK2001: 无法解析的外部符号 imp_CrtDbgReportW
工程属性,C/C++,代码生成,运行时库选择MDd,

[10]无法解析的外部符号”declspec(dllimport) public: int thiscall HiRTDB::CTagTree::GetObjectA(int,struct
HiRTDB::SBaseReadProps const &,struct
HiRTDB::SBaseReadValues &)” (imp_
GetObjectA@CTagTree@HiRTDB@@QAEHHABUSBaseReadProps@2@AAU
BaseReadValues@2@@Z),该符号在函数”public: int
thiscall
HiRTDB::CStringImpl::Get(int,struct
HiRTDB::SStringReadProps const &,struct
HiRTDB::SStringReadValues &)” (
Get@CStringImpl@HiRTDB@@QAEHHABUSStringReadProps@2@AAUSS
ringReadValues@2@@Z) 中被引用

原因可能是工程配置文件中有多余选项,请参考其他模块的配置选项,
要有多余配置。

以上原因都是可能原因。但是并没有解决我的问题,我的问题的原因是模板声明没有和头文件在同一个文件中,即我把头文件(.h)和头文件的实现(.cpp),分成了这两个部分,但是使用模板类编译器貌似并不能够实现这种写头文件的方法,因此才导致出现LNK2019这个错误,Orz。

解决方案

知道了原因解决方案就很简单啦。
以我出现的错误的原因为例
解决方案就是将模板声明和实现要放在同一文件中

解决方案参考链接1, error LNK2019: unresolved external symbo

解决方案参考链接2, “error LNK2019: 无法解析的外部符号”之分析