问题描述
- 一个C++编译问题(数组实现的线性表),提示错误 Lnk2019,Lnk1120,具体在下,谢谢大家
-
错误:
1>example2_1.obj : error LNK2001: 无法解析的外部符号 "void __cdecl reverse(class SqListClass &)" (?reverse@@YAXAAV?$SqListClass@H@@@Z)
1>E:TP算法算法导论练习测试listDebuglist.exe : fatal error LNK1120: 1 个无法解析的外部命令
代码template
class SqListClass //顺序表类
{
T *data; //存放顺序表中元素
int length; //存放顺序表的长度
public:
SqListClass(); //构造函数
~SqListClass(); //析构函数
void CreateList(T *str,int n); //由str中的元素建立顺序表
void DispList(); //输出顺序表L中所有元素
int ListLength(); //求顺序表的长度
bool GetElem(int i, T &e); //求顺序表中某序号的元素值
int LocateElem(T e); //按元素值查找其序号
bool ListInsert(int i, T e); //插入数据元素
bool ListDelete(int i); //删除数据元素
//其他例子友元函数
friend void reverse(SqListClass &L);
friend bool Delaelem(SqListClass &L,T x);
friend void Merge2(SqListClass &L1,SqListClass &L2,SqListClass &L3);
};//.................................
#include "list.h"
#include
using namespace std;
const int MaxSize=100; //顺序表的大小//-----------------顺序表的基本运算算法--------------------------------
template
SqListClass::SqListClass() //构造函数
{
data=new T[MaxSize]; //为data分配长度为MaxSize的空间
length=0; //初始时置length为0
}
template
SqListClass::~SqListClass() //析构函数
{
delete [] data; //释放空间
}
template
void SqListClass::CreateList(T a[],int n) //由a中的元素建立顺序表
{ int i;
for (i=0; i
data[i]=a[i]; //将a的每个元素存放到data元素中
length=i;
}
template
void SqListClass::DispList() //输出顺序表中所有元素
{ int i;
if (length > 0)
{
for (i=0; i
cout
cout
}
}
template
int SqListClass::ListLength() //求顺序表的长度
{
return length;
}
template
bool SqListClass::GetElem(int i, T &e) //求顺序表中某序号的元素值
{ if (i < 1 || i > length)
return false; //参数错误时返回false
e=data[i - 1]; //取元素值
return true; //成功找到元素时返回true
}
template
int SqListClass::LocateElem(T e) //按元素值查找其序号
{ int i=0;
while (i < length && data[i]!=e)
i++; //查找元素e
if (i>=length) //未找到时返回0
return 0;
else
return i + 1; //找到后返回其逻辑序号
}
template
bool SqListClass::ListInsert(int i, T e) //插入数据元素
{ int j;
if (ilength+1)
return false; //参数错误时返回false
for (j=length; j>=i; j--) //将data[i-1]及后面元素后移一个位置
data[j]=data[j-1];
data[i-1]=e; //插入元素e
length++; //顺序表长度增1
return true; //成功插入返回true
}
template
bool SqListClass::ListDelete(int i) //删除数据元素
{ int j;
if (ilength) //参数错误时返回false
return false;
for (j=i-1; j<length-1; j++) //将data[i]之后的元素前移一个位置
data[j]=data[j+1];
length--; //顺序表长度减1
return true; //成功删除返回true
}//.................................................................................
#include "list.cpp"
template
void reverse(SqListClass &L)
{ int i;
T tmp;
for (i=0;i
{ tmp=L.data[i];
L.data[i]=L.data[L.length-i-1];
L.data[L.length-i-1]=tmp;
}
}
void main()
{
int n=6;
int a[]={1,2,3,4,5,6};
SqListClass L; //建立元素类型为int的顺序表对象L
cout << "创建顺序表L" << endl;
L.CreateList(a,6);
cout << "顺序表L:" ;
L.DispList();
cout << "逆置顺序表L" << endl;
reverse(L);
cout << "顺序表L:";
L.DispList();
cout << "销毁顺序表L" << endl;
system("pause");
}
解决方案
对应函数实现的代码有没有一起编译进来
解决方案二:
你那个T模板内容是啥。。。