求助各位大神找错!!!

xiehebing789 2011-03-21 08:20:37
编译和链接过程都没有错~但是每次遍历链表的时候总是弹出 “XXX.exe 已停止工作” 程序哪里错了么??
#ifndef AA_H
#define AA_H
template <class T>
class LinkList;
template <class T>
class Node
{
public:
friend class LinkList<T>;
private:
T data;
Node<T> *next;
};
template <class T>
class LinkList
{
public:
LinkList();
LinkList(T a[],int n);
void insert(int i,T item);
T del(int i);
void getAll();
private:
Node<T> *head;
};
#endif




#include<iostream>
#include"aa.h"
using namespace std;
template <class T>
LinkList<T>::LinkList() //有头节点
{
head=new Node<T>;
head->next=NULL;
}
template <class T>
LinkList<T>::LinkList(T a[],int n)
{
Node<T> *rear,*s;int i;
head=new Node<T>;
rear=head;
for(i=0;i<n;i++)
{
s=new Node<T>;
s->data=a[i];
s->next=NULL;
rear->next=s;
rear=rear->next;
}
}

template <class T>
void LinkList<T>::insert(int i,T item)
{
Node<T> *p=head->next;
int j=1;
while(p->next!=head&&j<i-1)
{
p=p->next;
j++;
}
if(p->next==head)
cout<<"wrong number"<<endl;
else
{
Node<T> *s;
s=new Node<T>;
s->data=item;
s->next=p->next;
p->next=s;

}
}
template <class T>
T LinkList<T>::del(int i)
{
Node<T> *p=head->next;
int j=1;
while(p->next!=head&&j<i-1)
{
p=p->next;
j++;
}
if(p->next==head)
cout<<"wrong number"<<endl;
else
{
Node<T> *q=p->next;
T x=q->data;
p->next=q->next;
delete q;
return x;
}
}
template <class T>
void LinkList<T>::getAll()
{
Node<T> *p=head->next;
while(p!=head)
{
cout<<p->data<<endl;
p=p->next;
}
}





#include<iostream>
#include"aa.cpp"
using namespace std;
int main()
{
cout<<"***********************************"<<endl;
cout<<" 1--在第i个位置插入元素item"<<endl;
cout<<" 2--删除链表的第i个元素"<<endl;
cout<<" 3--遍历链表"<<endl;
cout<<"***********************************"<<endl;
int n;
cout<<"输入链表长度"<<endl;
cin>>n;
double *data= new double[n];
cout<<"enter items"<<endl;
for(int i=0;i<n;i++)
cin>>data[i];
LinkList<double> list(data,n);
cout<<"选择一个调用方法"<<endl;

while(1){
int i;
cin>>i;
switch(i){

case(1):
{
cout<<"输入插入位置及数据"<<endl;
int x;double y; cin>>x>>y;
list.insert(x,y);cout<<"选择一个调用方法"<<endl;break;}
case(2):
{
cout<<"输入位置i,并删除"<<endl;
int c;cin>>c;
cout<<list.del(c)<<endl;cout<<"选择一个调用方法"<<endl;break;}
case(3):
{
cout<<"get all datas"<<endl;
list.getAll();cout<<"选择一个调用方法"<<endl;break;}
default: cout<<"选择正确号码"<<endl;break;
}
}
return 0;
}






...全文
76 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2011-03-21
  • 打赏
  • 举报
回复
自己去搜索下吧。
xiehebing789 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pengzhixi 的回复:]
引用 3 楼 xiehebing789 的回复:
引用 1 楼 pengzhixi 的回复:
while(p!=NULL)

这个是循环链表呀~ while(p!NULL) 不是单链表的判断方法么

从你的构造函数我看不出循环链表的影子。
[/Quote]
循环链表和单链表构造函数可以一样的吧
maoxing63570 2011-03-21
  • 打赏
  • 举报
回复
还是把声明和实现放到一个头文件中,免了不少事
pengzhixi 2011-03-21
  • 打赏
  • 举报
回复
google刘未鹏“为什么C++编译器不支持模板的分离编译”
maoxing63570 2011-03-21
  • 打赏
  • 举报
回复
你的声明和实现放到了不同的文件中了
xiehebing789 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
另外模板不要分离编译。
[/Quote]
什么叫模版分离编译啊~求指导~
pengzhixi 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiehebing789 的回复:]
引用 1 楼 pengzhixi 的回复:
while(p!=NULL)

这个是循环链表呀~ while(p!NULL) 不是单链表的判断方法么
[/Quote]
从你的构造函数我看不出循环链表的影子。
maoxing63570 2011-03-21
  • 打赏
  • 举报
回复
VS系列还有VC6.0等这些都不支持模板的分离编译
LinuxBirdMan 2011-03-21
  • 打赏
  • 举报
回复
建议你打断点到这个函数内,一步一步跟下去。。看到哪一步出错了。。。然后自己调整。。。
代码太多太乱了。。不想看。。。自己debug吧。。。
LinuxBirdMan 2011-03-21
  • 打赏
  • 举报
回复
运行到getall的时候出的错?
xiehebing789 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
while(p!=NULL)
[/Quote]
这个是循环链表呀~ while(p!NULL) 不是单链表的判断方法么
pengzhixi 2011-03-21
  • 打赏
  • 举报
回复
另外模板不要分离编译。
pengzhixi 2011-03-21
  • 打赏
  • 举报
回复
while(p!=NULL)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧