模板的分离编译
来源:互联网 发布:淘宝商城男装赖克 编辑:程序博客网 时间:2024/04/29 07:22
模板
模板是编写与类型无关的逻辑代码(泛型编程),是复用的一种方式。
模板类形式:
template<class/typename 形参名>; class 类名 {……};
模板函数形式:
template<class/typename 形参名>;函数类型 函数名(参数列表) {……}
分离编译
一个项目由多个源文件组成,每个源文件会单独编译成各自的目标文件,通过链接将各个源文件的目标文件链接成一个可执行文件的过程。
但是在编译模板程序的时候往往这样会出现错误:
这种错误是链接时错误,一般是因为声明的函数在链接时没有找到函数的实现体。
因为模板是实例化之后才会生成有效地代码,实例化之前只会检查函数的形式是否错误,不会检查模板函数体内的代码是否正确。
具体分析:
下面是给出的程序的 .h 和 .cpp 文件:
//template.htemplate <class T>class Data{public: Data();//声明函数public: T year; T month;};//template.cpp#include "template.h"template <class T>//定义函数Data<T>::Data():yera(0), month(0){}//main.cpp#include "template.h"int main(){ Data<int> d;//调用函数}
在编译main.cpp文件的过程中,main.cpp知道template.h文件中对函数Data()的声明,调用Data()函数就形成一条call指令,但是这个指令指向的地址是一个错误的,当在链接的时候才可以知道Data()函数的实体是在哪个 .obj 文件中。
在此程序中Data()函数的实体定义在template.cpp文件中,但是编译的时候template.obj中没有Data()函数实体的代码,链接的时候没有找到Data()函数的实体就出现错误。
原因:在C++中,模板需经过实例化后才能生成有效地代码,这样链接的时候才不会出错。
阅读全文
0 0
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 模板的分离编译
- 这不是赶鸭子上架么
- 设计开发前的产品原型图
- PLSQL之批量导数据
- Smallest Difference (穷竭搜索)
- TCP 文件服务器 (将服务器上的文件全部发给客户端)示例代码
- 模板的分离编译
- 【C++的探索路7】运算符重载的基本概念与赋值运算符重载
- String类的使用
- 一次CMMI虚假改进、评估的案例
- java 运行脚本
- 请求调页存储管理方式的模拟-python实现
- 分答项目_知识点:伴随播放语音时的波浪图效果
- Cleaning Shifts (贪心)
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题)