当你不使用这个模板函数或模板类,编译器并不实例化它,当你使用时,编译器需要实例化它,因为编译器是一次只能处理一个编译单元,也就是一次处理一个cpp文件,所以实例化时需要看到该模板的完整定义。所以都放在头文件中。

  这不同于普通的函数,在使用普通函数时,编译时只需看到该函数的声明即可编译,而在链接时由链接器来确定该函数的。

  其实模板实现不能放在cpp文件中,主要是cpp在c++编译期间不能决定模板参数的类型,所以不能生成模板函数的实例,所以它会把模板类型带到链接期间,如果这个期间有函数调用了该实例,这个时候由于没有把模板实例到特定类型,就会导致编译错误。但是如果不调用该模板函数,那么是不会出现错误的。

转载于:https://www.cnblogs.com/QoQian/p/5054386.html

为什么模板函数的声明和实现都放在.h文件中相关推荐

  1. 为什么C++模板函数的声明与实现都放在.h文件中

    引用C++primer的话:C++支持两种模板编译模式包含模式(Inclusion   Model )和分离模式(Separation Model) 1. 包含编译模式 在包含编译模式下,在每个模板被 ...

  2. 【C++】模板函数的声明和定义必须在同一个文件中

    1.问题描述 习惯性的将函数的定义和实现,分别写在头文件和源文件(.cpp)中.今天也按照这个习惯实现了一个模板函数.然后编译时报错 ... error: undefined reference to ...

  3. c++模板函数的声明和定义该在什么文件里?

    最近在写模板函数的时候,发现了一个问题. 按照江湖规矩我们的声明一般放在.h文件,定义放在.cpp文件. 而在写模板函数的时候,套用江湖规矩会出错. 解决方法:将模板函数的声明和定义都放在.h文件中. ...

  4. 为什么C++模板声明与定义要放在同一文件中?

    写了3年多C++程序,很少用到模板,我靠,今天想试一下,照着别人的例子写,什么鬼,怎么都运行不过,仔细比对代码才发现,C++模板的声明与定义必须放到一个文件,.h或者.hpp, 真是颠覆我对C++编程 ...

  5. C++模板函数的声明和定义是否可以分开?

    如果按照普通函数一样,将模板函数的声明与定义的分开,声明放在头文件,定义放在cpp文件实现,你会发现,编译没问题,但是在链接阶段会报"undefined references". ...

  6. error LNK2005 --类的声明和定义放在一个文件中

    刷C++primer的时候,将类的声明和定义均放在头文件中,报错error LNK2005 1> Sales_data.h 1>Sales_data.obj : error LNK2005 ...

  7. 将函数实现放在头文件中

    研究一个开源算法库,采用C++模板编程,所有函数实现都放在了头文件中,现在把模板去掉,链接时发生冲突,具体原因如下: 因为多个源文件包含了含有函数定义的头文件,在编译的时候,每个源文件都会包含一份函数 ...

  8. 将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中

    将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中 写这种.h和.cpp文件分开的大程序,虽然对很多人来说很简单,对自己来说算是第一次吧,好好学C++,加油~ 题目:定义Point类,由 ...

  9. 利用fputc函数写一个putw(w,fp)函数,将整数w写入fp所指文件中; 利用fgetc函数写一函数getw(fp)从所指文件读出一整数

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 5.利用fputc函数写一个putw(w,fp)函数,将整数w写入fp所指文件中: 利 ...

最新文章

  1. CCF NOI1134 奶牛晒衣服
  2. (调用系统电话薄)运行时权限的基本使用
  3. 数据中心分布情况和业务占比分析
  4. RNN-LSTM循环神经网络-03Tensorflow进阶实现
  5. HTML+CSS+JavaScript复习笔记持更(九)——CSS3常用属性之盒模型
  6. 艾瑞发布2018视频云行业报告,网易云信领跑第一阵营
  7. 学 Python找不到练手项目?试试这些!
  8. 一拍即合、一见钟情之后,智慧城市的“福利”来啦……
  9. mapinfo图层导入奥维_(通信技能分享)怎样把谷歌地球上画的路线图导入到测试软件中!...
  10. MySQL在Docker环境下运行基础
  11. 更新了android sdk出现aapt问题以及模拟器启动错误
  12. cron和crontab_Linux crontab命令创建和管理Cron作业
  13. 奇怪的比赛|2012年蓝桥杯B组题解析第四题-fishers
  14. 进行单元测试时一直报这个错,原因是缺少aspectjweaver包
  15. 【算法学习笔记】18:树与图的DFS与BFS
  16. 网络编程笔记之TCP例子(帅帅老师讲堂)
  17. 影单:分享一下最近在看的一些电影
  18. 【SeedLab】Packet Sniffing and Spoofing Lab
  19. 得到本机所有 IP 地址
  20. NSFC 申请不中的反思 (内部讨论)

热门文章

  1. Qt 多界面来回切换的问题以及Qt界面关闭与销毁
  2. 牛客国庆集训派对Day3: G. Stones(博弈+SG)
  3. bzoj 3632: 外太空旅行(随机)
  4. 贪心算法 (Greedy Algorithm)
  5. [PyTorch] PyTorch版本不兼容问题+更新日志链接
  6. k3s 部署, 使用注意事项
  7. uuid和python中的uuid.py的使用教程
  8. Android开发:getSupportFragmentManager()不可用
  9. JavaSE学习笔记(七)—— 继承final关键字
  10. centos7 卸载 jdk