Error LNK2019: unresolved external symbol C++模板类声明与定义链接错误问题
编译器在编译模板时,并不会生成代码,只有遇到实例化的时候才会生成代码。因此,当我们只引用模板声明文件的时候,在实例化的对象时候,模板的定义问文件是不可见的,于是出现链接错误。例如:
//A.h #pragma once template<typename T> class A{ public: A(); ~A(); };
//A.cpp #include"A.h" template<typename T> A<T>::A(){ } template<typename T> A<T>::~A(){ }
//Main.cpp #include"A.h" int main() { A<int> a; return 1; }
以上的模板使用则会出现LNK2019错误,原因如上述所言。
解决方法:
(1)在Main.cpp当中同时引用A.h和A.cpp文件,如下所示:
#include"A.h" #include"A.cpp" int main() { A<int> a; return 1; }
(2)将A的声明和定义同时写在一个文件当中。如下所示:
#pragma once template<typename T> class A{ public: A(); ~A(); }; template<typename T> A<T>::A(){ } template<typename T> A<T>::~A(){ }
以上。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步