C++使用模板类时出现LNK2019 unresolved external symbol错误.

如果你在使用模板类的时候, Declaration和Definition都没有问题, 但却出现了unresolved external symbol错误.

那你应该时遇到了和我一样的问题.



这是一个链接错误, 即程序在运行时并没有找到你所调用的外部符号.

C++在编译普通类和模板类是稍有不同.

在编译普通类时, 会在编译时就令其生成编译单元.

所以如果你调用了头文件里函数, 编译器会首先在你包含的头文件中寻找该函数,

如果该函数没有被实现(Definition), 他会在其他编译单元的导出符号表里寻找同名的函数, 最终完成程序的执行.

但是模板类有些特殊.  当一个模板类没有被调用时, 他就不会被具现化. 也就是说, 模板类的函数是没有编译单元的, 并没有产生二进制代码.

所以找不到函数的实现, 也就产生了unresolved external symbol错误.

解决方法:

1.将模板类的声明和实现都放在头文件中, 而不是分别放在.h和cpp文件中. 这样就给了模板类一个具现化的机会.

这位大佬写的比较清楚, 建议康康: https://blog.csdn.net/qq_41884002/article/details/99816073

原文地址:https://www.cnblogs.com/Ravenzzz/p/12558014.html

时间: 2024-08-06 16:41:04

C++使用模板类时出现LNK2019 unresolved external symbol错误.的相关文章

C++ Error: error LNK2019: unresolved external symbol

在currennt工程中新添加了一个文件x.cu与x.hpp,最后编译整个工程的时候就出现了这个问题: error LNK2019: unresolved external symbol 这是链接错误,表示没有找到编译好的二进制库文件~ 这很诡异,因为我并没有引用什么第三方的lib(这很容易出现上述问题),编译器提示出现问题的代码是我自己写的啊! 又感觉脊背发凉……… 最后不断排查,几乎把所有可能出错的代码都注释了,最后查到问题了,原来是template没有实例化= = 并非没有找到编译好的二进

VC: error LNK2019:unresolved external symbol *** referenced in function ***的解决方案

当头文件中声明了一个函数,但是在相应的源文件中却没有对该函数进行定义,则会出现为“解决的外部符号”(unresolved external symbol )错误.另外,当一个函数调用了外部的一个库文件中的函数,但是在当前project的properties中并没有将所依赖的(dependent)库文件包含进来时,也会出现这种错误. 综上,当一个solution在linking时找不到所涉及到的函数的定义时就会出现“unresolved external symbol ”错误. 例如,下面是调用r

C++ win32 dll 引用外部CLR,加载托管程序集异常-Error 10 error LNK2019: unresolved external symbol _CLRCreateInstancet

异常: Error 10 error LNK2019: unresolved external symbol [email protected] referenced in function "unsigned long __stdcall StartTheDotNetRuntime(void *)" ([email protected]@[email protected]) E:\C++\VC项目\NativeDll\NativeDll.obj NativeDll 解决措施: nat

error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall CADOConn::CADOConn(void)"解决

背景:在MFC程序中写了两个project,其中一个project需要引用win32 project(ADOConn). 1. __thiscall实为noise信息,重点是之后的CADOConn::CADOConn(void),原因为CADOConn有一个默认的构造函数,只有声明没有实现,需在.cpp文件中实现. 2. VS Configuration Properties下列三项要设置正确. C/C++ ->General->Additional Include Directories 指

错误之unresolved external symbol

1>WinMain.obj : error LNK2019: unresolved external symbol [email protected]4 referenced in function [email protected]16 2>WinMain.obj : error LNK2019: unresolved external symbol [email protected]4 referenced in function [email protected]16 3>WinM

MFC 编译链接错误:unresolved external symbol

编译MFC程序过程出现以下错误: Error LNK2019 unresolved external symbol __imp___vsnprintf 解决方法:在Visual Studio工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可. LNK2001 unresolved external symbol __imp___iob 解决方法:在程序中重新定义_iob, 加上这段代码:extern"C" { FILE _iob[] = {

error LNK2001: unresolved external symbol "int g_cTemplates" ([email protected]@3HA)(转)

原文转自:http://blog.sina.com.cn/s/blog_639a2ad70101kpen.html 编译directshow若干问题的解决 1.安装好windows sdk,进入directshow目录下面的directshow\baseclasses,打开baseclasses.sln项目文件,编译,Debug目录下生成strmbasd.lib 2.新建vc filter工程,到工程属性->c/c++下添加包含目录,此步骤为添加directx头文件和directshow头文件,

OpenCv error :unresolved external symbol(链接库没有加上)

Error 如下:Linking...: error LNK2001: unresolved external symbol _cvDestroyWindow: error LNK2001: unresolved external symbol _cvLoadImage: error LNK2001: unresolved external symbol _cvReleaseCapture: error LNK2001: unresolved external symbol _cvRelease

Google glog error LNK2001: unresolved external symbol "__declspec(dllimport) int fLI::FLAGS_XXXX 错误的解决。

想在 windows 下使用 glog,使用类似 FLAGS_max_log_size 来设置参数,结果编译报错. 解决办法是在 项目属性 -> C/C++ -> Preprocessor -> Preprocessor Definitions 加入 GOOGLE_GLOG_DLL_DECL=. Google glog error LNK2001: unresolved external symbol "__declspec(dllimport) int fLI::FLAGS_