博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++类模板的声明和定义为什么要放在同一个文件
阅读量:6327 次
发布时间:2019-06-22

本文共 527 字,大约阅读时间需要 1 分钟。

不是只能放在.h里面,但是推荐放在.h里面。STL模板实现全部是放在.h里面的。 ------------------ 编译能通过。 1)参与编译的只是.cpp文件,不会报错的原因,是因为它能在.h里面找到模板的声明。 链接错误。 1)链接的时候,需要实例化模板,这时候就需要找模板的具体实现了。假设在main函数中调用了一个模板函数,这时候就需要去实例化该类型的模板。注意main函数里面只包含了.h文件,也就是只有模板的声明,没有具体实现。就会报错。 2)而模板的实现.cpp里面,虽然有模板的具体实现,但是没有谁在该.cpp里面使用一个模板函数,就不会生成一个具体化的实例。 ps:模板是在需要的时候,才会去生成一个具体化的实例的,比如,你只要一个int型的实例,模板就只会给你生成一个int型的实例,模板本身是不会被执行的(也就是模板本身不产生汇编指令),是模板生成的具体化实例才产生指令(这个实例是隐藏的,我们是看不到的) 解决方案: 1)将模板实现写在.h里面 2)如果你非要写在.cpp里面,那么请在模板实现的.cpp文件里面(或者.h里面)显式的实例化一个模板。如果是这样的话,那模板就没有太大的意义了,难道你去自己手动实例化所有的实例?

转载地址:http://uogaa.baihongyu.com/

你可能感兴趣的文章
ts 与 C#的 一个差异的地方
查看>>
django模板-自定义标签、过滤器
查看>>
Dreamweaver使用过程的小技巧
查看>>
2017年12月13日高级软件测试技术实践作业3
查看>>
session和cookie的介绍
查看>>
《Clean Code》 代码简洁之道
查看>>
Dictionary<TKey, TValue> 进行where的枚举遍历
查看>>
《我是一只IT小小鸟》读后感
查看>>
编辑文件 vi,vim的基本操作
查看>>
动态sql的两种执行方式execute-sp_executesql
查看>>
socket servlet webservice 区别及使用场景
查看>>
C++检测一个文件是否存在
查看>>
Linux学习之路(一)
查看>>
C-5 猜数字游戏
查看>>
使用 Gii 生成代码
查看>>
SQL三值逻辑
查看>>
ML 逻辑回归 Logistic Regression
查看>>
java开始到熟悉105-107
查看>>
VMware安装CentOS7后无法使用yum
查看>>
如何查看oracle用户具有的权限和角色
查看>>