c++模板类的多文件问题
写线性表用到模板类的问题#ifndef LINEAR_H_INCLUDED#define LINEAR_H_INCLUDED/***************** abstract class ****************************/#pragma once#include<iostream>class illegalparametervalue{};template&
·
- 写线性表用到模板类的问题
#ifndef LINEAR_H_INCLUDED
#define LINEAR_H_INCLUDED
/***************** abstract class ****************************/
#pragma once
#include<iostream>
class illegalparametervalue
{
};
template<class T>
class linearlist
{
public:
virtual ~linearlist() {};
virtual bool empty()const = 0;
virtual int size()const = 0;
//virtual T& get(int theindex)const = 0;
//virtual int indexof(const T& theelement)const = 0;
//virtual void ersae(int theindex) = 0;
//virtual void insert(int theindex, const T & theelement) = 0;
//virtual void output(ostream& out)const = 0;
};
template<class T>
class arraylist : public linearlist<T>
{
protected:
void checkindex(int theindex)const;
T * element;
int arraylength;
int listsize;
public:
arraylist(int initialcapacity = 10);
arraylist(const arraylist<T>&);
~arraylist() { delete[] element; }
bool empty()const { return listsize == 0; }
int size()const { return listsize;}
//T& get(int theindex)const;
//int indexof(const T& theelement)const;
//void ersae(int theindex);
//void insert(int theindex, const T & theelement);
//void output(ostream& out)const;
void show();
int capacity()const { return arraylength; }
};
#endif // LINEAR_H_INCLUDED
- 头文件的cpp文件
#include"linear.h"
#include<iostream>
#include<sstream>
using std::ostringstream;
using std::endl;
using std::cout;
template<class T>
arraylist<T>::arraylist(int initialcapacity)
{
if (initialcapacity < 1)
{
ostringstream s;
s << "initialcapacity" << initialcapacity << "must > 1" << endl;
cout << "noready" << endl;
//throw illegalparametervalue;//(s.str());
}
arraylength = initialcapacity;
element = new T[arraylength];
listsize = 0;
cout << "ready" << endl;
}
template<class T>
arraylist<T>::arraylist(const arraylist<T>& thearray)
{
arraylength = thearray.arraylength;
listsize = thearray.listsize;
element = new T[arraylength];
copy(thearray.element, thearray.element + listsize, element);
}
template<class T>
void arraylist<T>:: show()
{
cout<<"66";
}
#include"linear.h"
#include <iostream>
#include"linear.cpp"
int main()
{
std::cout << "Hello World!\n";
arraylist<int> y(5);
std::cout << "1223";
//y.show();
//catch (illegalparametervalue & a) {std :: cout << "66 "; }
}
- 注意:写类模板的时候要将头文件和cpp文件写在一块,或者在main函数的文件中加入include cpp,否则在main函数会报出没有声明的问题
更多推荐
所有评论(0)