模板类中的error LNK2019

本文探讨了在C++中使用模板类时遇到的LNK2019和LNK1120编译错误,并提供了多种解决方案。通过将模板的声明与实现放在同一文件或特定配置中,可以避免链接阶段的问题。

之前我一直以为,类的定义写在头文件中,成员函数的实现写在.cpp文件里,直到我今天写了模板类,出现了LNK2019和LNK1120,一直找不到出错的原因,百度了一下才知道,如果将类模板的声明和实现写在两个独立的文件里,在构建时出现这样的错误。

解决方法:

第一种:将模板的声明和实现写在同一个文件中

第二种:在主文件(main文件)中,既包含类模板声明文件(.h文件),又包含类模板的实现文件(.cpp文件)

第三种:在类模板声明文件的最后包含类模板的实现文件

出错原因:

因为模板类和模板函数只有在使用时才会实例化。当模板被使用时,编译器需要函数的所有代码,来用合适的类型去构建正确的函数,而如果函数的实现写在一个独立的源文件中,这些文件是不可见的,因此会出错。

其实出错原因还是不太懂。。。。

 

时隔一周,我终于找到了另一种解决办法,在数据结构老师的实验指导中,说明了:

删除(不是“移除”)LinkedList项目中的下述文件:

a.<头文件>中的 stdafx.h targetver.h

b.<源文件>中的 stdafx.cpp

c.打开 LinkedList.cpp

删掉引用:#include “stdafx.h

删掉自动生成的主函数代码

int _tmain(int argc, _TCHAR* argv[]) {

    return 0;

}

老师说的是VC++不允许模板类的声明和实现分别写在.h和.cpp文件中,我的VS2017也不允许这么做。经过这样的处理之后,就形成一个清洁的.cpp文件,以后就将数据结构写在这样一个清洁的源文件中,在main函数在文件开头,将这个.cpp文件include即可。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值