C++模板类链接错误:LNK2001, LNK2019

问题描述:做了一个模板类,类定义放在头文件TStack.h中,类实现放在TStack.cpp中。在主程序中实例化时,发生链接错误LNK2019。

Stack<float>  floatStack(5);


错误信息:error LNK2019: 无法解析的外部符号 "public: __thiscall Stack<float>::Stack<float>(int)" (??0?$Stack@M@@QAE@H@Z),

原因分析:Visual C++里面对于模板类的封装有限制,要求成员模板的定义要完全封装在类内。如果模板类的接口实现放在CPP中,类定义放在头文件中,则会发生这个错误。具体可以参见微软解释 http://support.microsoft.com/kb/239436/zh-cn。

解决方法:一种最简单,通用性比较强的方法是把接口实现和类的定义都放在头文件中,满足模板定义封装在类内的要求。

                    微软解释中还有另一种实例化的方法,但实际测试中没有成功。



在使用类模板时,可能会出现"error LNK2019: 无法解析的外部符号"和"error LNK2001"的错误。这些错误通常是由于链接器无法找到类模板的定义或函数的实现而导致的。 解决"error LNK2019: 无法解析的外部符号"错误的方法有以下几种: 1. 将类模板的声明和实现都放在类的定义中(.h文件)。 2. 在主文件(main文件)中同时包含类模板的声明文件(接口文件)和实现文件(.cpp文件)。 3. 在类的定义中(.h文件)的最后包含类模板的实现文件(.cpp文件)。 解决"error LNK2001"错误的方法是: 1. 检查是否在类模板中使用了未定义的函数。如果是,确保这些函数的定义在可见范围内,或者在类模板中提供相应的实现。 综上所述,为了解决UE5中的LNK2019LNK2001错误,可以采用类似的方法。确保类模板的声明和实现都正确地链接到主文件中,并检查是否存在未定义的函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [UE4 C++ error LNK2019: 无法解析的外部符号](https://blog.csdn.net/qq_34970171/article/details/118741164)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [解决error LNK2005 void __cdecl operator delete(void](https://download.csdn.net/download/lj_70596/14921684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值