c++模板使用及常见问题
2019-09-04 07:08:12来源:博客园 阅读 ()
一、为什么使用模板??
使用模板的目的是为了避免重复声明和定义一系列基本功能相同的函数或者类,其区别因传入参数的不同而产生不同类型的数据,其基本工作过程都是一致的!
二、调用模板函数产生不明确问题
(1)template declarations are only permitted at global ,namespace ,or class scope
模板声明只允许在全局、命名空间或类范围内使用!故不能在main函数中直接定义。
(2)conld not deduce template argument for T
不明确传递给fun()函数的T类型!
解决方法,可以在调用的时候加以声明。
(3)对于传入模板的参数不同的问题
模板函数的参数类型定义的是double,调用时确是int和float,实际即为类型转换问题。
(4)模板继承问题
- 如果父类自定义了构造函数,记得子类要使用构造函数列表来初始化
- 继承的时候,如果子类不是模板类,则必须指明当前的父类的类型,因为要分配内存空间
- 继承的时候,如果子类是模板类,要么指定父类的类型,要么用子类的泛型来指定父类
(5)友元函数未定义问题
在编译器进行编译的时候,编译器会产生类的模板函数的声明,当时实际确认类型后调用的时候,会根据调用的类型进行再次帮我们生成对应类型的函数声明和定义。我们称之为二次编译
。同样,因为这个机制,会经常报错找不到类的函数的实现
。在模板类的友元函数外部定义时,也会出现这个错误。解决方法是 “ 进行类的前置声明和函数的前置声明 ”。
(6)声明和定义不在同一个文件的问题
模板的声明是在.h文件,定义是在.cpp文件,因编译时只产生声明的代码,故编译不会出错,但是当调用时会产生找不到类或者函数的问题,
解决方法:1、将模板的声明和定义放在同一个文件中
2、主函数中调用#include<.cpp>或者将.cpp文件改为.hpp文件再引用
快牵着我的袜子
参考:https://www.jianshu.com/p/70ca94872418
原文链接:https://www.cnblogs.com/socks/p/11451600.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++11多线程相关
下一篇:c++ map容器使用及问题
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash