C++模板的学习.
来源:互联网 发布:支付宝接口 返回数据 编辑:程序博客网 时间:2024/05/14 20:03
今天晚上不想上自习, 在宿舍里又闲着没事, 就想到了以前编写C++模板类的时候总或多或少的出现问题.
于是就在上面编写个简单的模板类.代码如下
AA.H 文件
#include <stdexcept>
template<typename T>
class A
{
public:
A();
A(int m, const T& val = A());
~A();
T& operator[](int i)const;
int Length() const { return size; }
private:
T *element;
int size;
};
在AA.CPP中实现
#include "aa.h"
template<typename T>
T& A<T>::operator [] (int i) const
{
if(i<0 || i>=size) throw std::out_of_range("index out of range./n");
return element[i];
}
template<typename T>
A<T>::A() : size(0)
{
}
template<typename T>
A<T>::A(int m, const T& val) : size(m)
{
element = new T[size];
for(int i = 0; i<size; i++)
element[i] = val;
}
template<typename T>
A<T>::~A()
{
delete [] element;
}
运行时出现错误
error LNK2001: unresolved external symbol "public: __thiscall A<int>::~A<int>(void)" (??1?$A@H@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: int & __thiscall A<int>::operator[](int)const " (??A?$A@H@@QBEAAHH@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall A<int>::A<int>(int,int const &)" (??0?$A@H@@QAE@HABH@Z)
这个问题已经困扰我好长时间了.直到今天还没有完全明白.
模板类并不是真正的类, 只有当实体化的时候才完成了定义,然后拿这个定义才能去建立对象.
可我记得在标准C++里把模板的声明和实现分开在不同的文件里,是不是编译器实现再来有难度,所以就不实现这个功能吗?? 希望有高手来指正.
- C++primer学习:模板编程(2):类模板的定义
- C++template ;模板学习
- 学习C++模板---模板函数
- Effective C++:条款43:学习处理模板化基类内的名称
- 《Effective C++》:条款43:学习处理模板化基类内的名称
- (C/C++学习笔记)函数模板的深入理解
- 小白教你学习C++(5)函数模板的使用
- C/C++学习之模板
- 【c++】模板的特化
- C++primer学习:模板编程(6):模板实参推断和forward的运用与源代码
- 我的小小学习笔记(7)之C++------模板之模板函数
- C++模板的学习.
- WPF模板的学习
- 模板的初步学习
- smarty模板的学习
- C++模板的学习
- 学习C++模板---模板类带简单参数
- 学习C++模板---模板类作为基类
- Spring:JdbcTemplate使用指南
- Csdn richTextEditor
- 为全体用户自动修改“我的文档”、“桌面”、“临时目录”的路径
- 【转】最全的C/C++面试题和答案
- 什么是职业经理人
- C++模板的学习.
- JDBCTemplate 数据读取机制
- FOST.3-Web框架for C++
- 开发一个高质量J2EE系统
- 主考官的深思
- 一组方便调试的宏
- [簡單文章]认识 -- JAVA
- Linux安装进程中分区长度的划分.
- WINDOWS平台下的SOCKET聊天程序