您的位置:首页 > 编程语言 > C语言/C++

C++模板的学习.

2007-04-04 20:10 274 查看
今天晚上不想上自习, 在宿舍里又闲着没事, 就想到了以前编写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++里把模板的声明和实现分开在不同的文件里,是不是编译器实现再来有难度,所以就不实现这个功能吗?? 希望有高手来指正.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: