一、遇到问题:
原因:类的函数定义不能放在SeqList.cpp中,必须放在Seqlist.h(类的函数声明和定义放在同一个文件下)中,否则
会出现以下问题。
二、实现程序:
1.SeqList.h
#ifndef SeqList_h
#define SeqList_h
#include <iostream>
using namespace std;
const int defaultSize = 100;
template<class T>
class SeqList{
public:
SeqList(int sz = defaultSize); // 构造函数
SeqList(SeqList<T>& L); // 复制构造函数
~SeqList(); // 析构函数
int Size(); // 重载虚函数:计算表最大可容纳表项个数,限制权限,类外无法直接获取maxSize
int Length(); // 计算表长度
int Search(T x); // 搜索x在表中位置,函数返回表项序号
int Locate(int i); // 定位第i个表项,函数返回表项序号
bool getData(int i, T& x); // 取第i个表项的值
void setData(int i, T x); // 用x修改第i个表项的值
bool Insert(int i, T x); // 在第i个表项后插入元素x
bool Remove(int i, T& x); // 删除第i个表项,通过x返回
bool isEmpty(); // 判断表是否为空,空则返回true;否则,返回false
bool isFull(); // 判断表满否,满则返回true;否则,返回false
void Input(); // 输入数据建立表
void Output(); // 打印表
void Sort(); // 排序
SeqList<T> operator=(SeqList<T>& L); // 表整体赋值
private:
T *data; // 存放数组
int maxSize; // 最大可容纳表项的项数
int last; // 当前已存表项的最后位置(从0开始)
void reSize(int newSize); // 改变数组空间大小
};
template <class T>
SeqList<T>::SeqList(int sz) {
// 构造函数,通过指定参数sz定义数组的长度
if(sz > 0) {
maxSize = sz;
last = -1; // 置表的实际长度为空
data = new T[maxSize]; // 创建顺序表存储数组
if(data == NULL) {
cerr << "动态内存分配失败!" << endl;
exit(1);
}
}
}
template <class T>
SeqList<T>::SeqList(SeqList<T>& L) {
// 复制构造函数,用参数表中给出的已有顺序表初始化新建的顺序表
// 如果没有定义复制构造函数,系统会自动建立一个复制构造函数
maxSize = L.Size(); // 最大可容纳的个数
last = L.Length() - 1; // 数组最后的位置
T value;
data = new T[maxSize]; // 创建顺序表存储数组
if(data == NULL) {
cerr << "动态内存分配失败!" << endl;
exit(1);
}
for(int i = 1; i <= last+1; i++) {
L.getData(i, value); // 取第i个位置的值