谁帮我看一下这个程序为啥运行出错?(语法貌似正确)
#include<iostream>#include<cstring>
using namespace std;
typedef unsigned char BYTE; //定义字节类型
typedef void *ANYPOINTER; //定义万能指针类型
typedef void (*PACCESSFUNC)(ANYPOINTER); //定义访问函数类型
class LinkedList
{
private:
struct _Node
{
ANYPOINTER pData; //存储的数据
_Node* pNext; //指向后继结点的指针
_Node(int nDataSize,ANYPOINTER pData);
~_Node();
};
int nDataSize; //数据单元的大小
_Node * pHead; //头指针
public:
void Traverse(PACCESSFUNC pFunc); //遍历
void Empty(); //置空/揭断
bool IsEmpty(); //空判断
bool Delete(); //删除头结点
bool GetFirst(ANYPOINTER pData); //获得第一个结点数据
void Insert(ANYPOINTER pData); //在头部插入节点
LinkedList(int nDataSize);
~LinkedList();
};
LinkedList::_Node::_Node(int nDataSize,ANYPOINTER pData) //结点的初始化
{
this->pData=new BYTE[nDataSize]; //为节点分配存储空间
memcpy(this->pData,pData,nDataSize); //将数据复制到节点中
}
LinkedList::_Node::~_Node()
{
delete pData; //删除数据,释放空间
}
LinkedList::LinkedList(int nDataSize) //链表初始化
{
this->nDataSize=nDataSize;
pHead=NULL;
}
LinkedList::~LinkedList()
{
if(!IsEmpty())
Empty();
}
void LinkedList::Insert(ANYPOINTER pData)
{
cout<<"In Insert()..."<<endl;
_Node *p=new _Node(nDataSize,pData); //产生一个新节点
p->pNext=pHead; //使本节点的后继节点是原来头指针指向的节点
pHead=p; //使头指针指向本节点
}
bool LinkedList::GetFirst(ANYPOINTER pData)
{
if(IsEmpty())
return false;
memcpy(pData,pHead->pData,nDataSize); //将数据复制到制定地址
return true;
}
bool LinkedList::Delete()
{
cout<<"In Delete()..."<<endl;
if(IsEmpty())
return false;
_Node *p=pHead; //p指向第一个节点
pHead=p->pNext; //头指针指向p节点的后继
delete p; //删除p节点
return true;
}
bool LinkedList::IsEmpty()
{
return pHead=NULL;
}
void LinkedList::Empty()
{
cout<<"In Empty()..."<<endl;
while(Delete()); //每次删除头结点,直到全部结点被删除
}
void LinkedList::Traverse(PACCESSFUNC pFunc)
{
cout<<"In Traverse()..."<<endl;
_Node *p=pHead;
while(p)
{
pFunc(p->pData); //调用访问函数来处理节点的数据
p=p->pNext;
}
}
//调用函数,用于链表的遍历;它的类型与PACCESSFUNC相符
void PrintInt(ANYPOINTER pData)
{
cout<<*(reinterpret_cast<int *>(pData))<<endl;
}
//调用函数,用于链表的遍历;它的类型与PACCESSFUNC相符
void PrintDbl(ANYPOINTER pData)
{
cout<<*(reinterpret_cast<double *>(pData))<<endl;
}
//访问函数,用于将链表中存储的值加1
void Increase(ANYPOINTER pData)
{
int *p=reinterpret_cast<int *>(pData);
(*p)++;
}
void main()
{
//定义整型链表
LinkedList lli(sizeof(int));
for(int i=0;i<6;i++)
{
lli.Insert(&i);
}
lli.Traverse(PrintInt); //使用PrintInt函数来遍历链表
int d;
if(lli.GetFirst(&d))
cout<<"First element is"<<d<<endl;
lli.Delete();
lli.Traverse(PrintInt);
lli.Traverse(Increase);
lli.Traverse(PrintInt);
lli.Empty();
lli.Traverse(PrintInt);
//定义浮点链表
LinkedList llf(sizeof(double));
double f;
for(i=1;i<6;i++)
{
f=i*12.3456;
llf.Insert(&f);
}
llf.Traverse(PrintDbl);
}