【C++】模板函数的声明和定义必须在同一个文件中
1、问题描述
习惯性的将函数的定义和实现,分别写在头文件和源文件(.cpp)中。今天也按照这个习惯实现了一个模板函数。然后编译时报错
... error: undefined reference to ...
2、原因分析
c++中模板的声明和定义不能分开。C++中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正的被使用之前,编译器是无法知道,模板类中使用模板类型的对象的所占用的空间的大小的。只有模板被真正使用的时候,编译器才知道,模板套用的是什么类型,应该分配多少空间。这也就是模板类为什么只是称之为模板,而不是泛型的缘故。
参见博客:https://www.cnblogs.com/jingshikongming/p/9037881.html
3、解决方法
1)将C++模板函数的声明和定义写在头文件中。如果是,类成员函数,可以写在类外面,比较清晰。
2)使用export关键字,在头文件中声明后,在cpp文件中使用export再次修饰下模板函数。但是此方法,不推荐,因为在c++11中已经丢弃不用。
参见:https://zh.cppreference.com/w/cpp/keyword/export
C++ 关键词 export 用法:
C++11 以前:用于标记模板定义为被导出,这允许在其他翻译单元中声明但不定义同一模板。
C++11~C++20:不使用并保留该关键词。
C++20:标记一个声明、一组声明或另一各模块由当前模块所导出。
【C++】模板函数的声明和定义必须在同一个文件中相关推荐
- c++模板函数的声明和定义该在什么文件里?
最近在写模板函数的时候,发现了一个问题. 按照江湖规矩我们的声明一般放在.h文件,定义放在.cpp文件. 而在写模板函数的时候,套用江湖规矩会出错. 解决方法:将模板函数的声明和定义都放在.h文件中. ...
- 为什么模板函数的声明和实现都放在.h文件中
当你不使用这个模板函数或模板类,编译器并不实例化它,当你使用时,编译器需要实例化它,因为编译器是一次只能处理一个编译单元,也就是一次处理一个cpp文件,所以实例化时需要看到该模板的完整定义.所以都放在 ...
- 为什么C++模板函数的声明与实现都放在.h文件中
引用C++primer的话:C++支持两种模板编译模式包含模式(Inclusion Model )和分离模式(Separation Model) 1. 包含编译模式 在包含编译模式下,在每个模板被 ...
- C++模板函数的声明和定义是否可以分开?
如果按照普通函数一样,将模板函数的声明与定义的分开,声明放在头文件,定义放在cpp文件实现,你会发现,编译没问题,但是在链接阶段会报"undefined references". ...
- 为什么C++模板声明与定义要放在同一文件中?
写了3年多C++程序,很少用到模板,我靠,今天想试一下,照着别人的例子写,什么鬼,怎么都运行不过,仔细比对代码才发现,C++模板的声明与定义必须放到一个文件,.h或者.hpp, 真是颠覆我对C++编程 ...
- 内联函数的声明和定义
一.什么叫inline函数? inline(小心,不是online),翻译成"内联"或"内嵌".意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函 ...
- C语言详解系列——函数的认识(4)函数的声明与定义,简单练习题
文章目录 函数的声明与定义 函数的声明 函数的定义 简单的练习题 写一个函数可以判断一个数是不是素数 写一个函数实现二分查找 写一个函数,每调用一次这个函数,就会将 num 的值增加1. 函数的声明与 ...
- 静态成员变量与静态成员函数的声明与定义
类的静态成员变量在类中只能声明,定义和初始化要在类外: class Myclass { private: static int a; // 类内声明 } int Myclass::a = 10; // ...
- C语言中变量和函数的声明与定义
一.变量 在将变量前,先解释一下声明和定义这两个概念.声明一个变量意味着向编译器描述变量的类型,但并不为变量分配存储空间.定义一个变量意味着在声明变量的同时还要为变量分配存储空间.在定义一个变量的同时 ...
最新文章
- 适用于Android的OpenSL ES指南-OpenSL ES的Android扩展
- my life-long goal
- SpringCloud个人笔记-02-Feign初体验
- SqlSever分页查询,仅扫描一次表
- python变量命名可以有特殊符号吗,和孩子一起学习python之变量命名规则
- 基于C#语言的可编程表达式计算器设计
- web多线程之webworkers
- 仿英雄联盟网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW游戏介绍网页作业代码下载
- Web前端开发技术实验与实践(第3版)储久良编著实训11
- 算计算机一级应用app,计算机一级题库
- 3dmax su 简单_Sketchup导入3DSMAX的方法 3DMAX导入SU技巧
- Linux内核 失速(STALL) 警告说明文档翻译
- 需求预测——Predicting origin-destination ride-sourcing demand with a spatio-temporal encoder-decoder
- 文件锁(二)——文件锁的读锁和写锁
- Oracle基本认识
- Android 插件化之—— 加载插件中的资源
- 全方位解读Web3域名:DID基石、NFT新增长点
- DEDE:ping服务插件破解版推广信息解密过程实录
- STM32系列单片机USB下载程序(ISP编程)
- 输入框调用手机键盘的确认按钮
热门文章
- 【python】一次移动平均算法
- hbase 数据插入指定rowkey_「HBase大爆炸」HBase之常用Shell命令
- Mat矩阵基本操作与示例 OpenCV
- 在CentOS 6.3 64bit上利用iptables开放指定端口的方法
- ATS插件channel_stats源码分析解读
- Pip install: ImportError: cannot import name IncompleteRead
- 嵌入式系统开发过程中遇到的——volatile
- windows下rpc框架thrift的环境配置
- P1066 2^k进制数 NOIP 2006 提高组 第四题
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建属性网格