小弟是刚刚加入c++大队的,对c++中的基本知识只是稍微懂一点。今天在看《c++ primer》中的模板类时,就将其中的程序在vs 2008中写下,新建了Array.h和Array.cpp两个文件。
主函数:
Main.cpp1#include"stdafx.h"
2#include<iostream>
3#include"Array.h"
4
5usingnamespacestd;
6intmain(intargc,char*argv[])
7{
8Array<char>array;
9cout<<array.size()<<endl;
10
11charz;
12cin>>z;
13return0;
14}
15
16
头文件:
Array.h1#pragmaonce
2
3
4template<classelemType>
5classArray
6{
7public:
8
9explicitArray(intsz=DefaultArraySize);
10Array(Array<elemType>*array ,intarray_size);
11Array(constArray&rhs);
12
13~Array(void);
14
15//判断是否相等操作
16booloperator==(constArray&)const;
17booloperator!=(constArray&)const;
18
19//赋值操作符
20Array&operator=(constArray&);
21intsize()const{return_size;};
22
23elemType&operator>
Array头文件的实现:
Array.cpp1#include"StdAfx.h"
2#include"Array.h"
3#include<cassert>
4
5template<classelemType>Array<elemType>::Array(intsz)
6{
7Array<elemType>::Init(sz,0);
8}
9
10
11template<classelemType>Array<elemType>::Array(Array<elemType>array ,intarray_size)
12{
13Array<elemType>::Init(array_size,array);
14}
15
16
17template<classelemType>Array<elemType>::Array(constArray<elemType>&rhs)
18{
19Array<elemType>::Init(rhs.size(),rhs.ia);
20}
21
22template<classelemType>Array<elemType>::~Array(void)
23{
24delete []ia;
25std::cout<<"析构函数作用中。。。。。"<<std::endl;
26}
27template<classelemType>
28voidArray<elemType>::Init(intsz,elemTypearray)
29{
30_size=sz;
31ia=newelemType[_size];
32sorted=false;
33
34for(intix=0;ix<_size;++ix)
35{
36if(!array)
37ia[ix]=0;
38else
39ia[ix]=array[ix];
40}
41}
42template<classelemType>
43elemType&Array<elemType>::operator>
但是在编译的时候vs 2008提示“错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall Array
到网上找了好久,才找到原来是vs 2008不支持模板定义和实现分离。将Array.cpp的内容拷贝到Array.h中,在编译就可通过了。我在c-free中试了,也是不可以。看来这两个编译器都不支持模板定义和实现分离。
特意记下来,c++学习路上的一个脚印。
原文链接: https://www.cnblogs.com/mht_two/archive/2010/10/10/1847338.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/15967
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!