为什么加上最后一句就有错误??各位高手帮下忙

chonghui1001 2010-04-24 10:25:37
#include <assert.h>
#include <iostream>
using namespace std;
const int MaxNumv=50;
const int MaxNume=50;
template<class T> class Seqlist{
public:
Seqlist(int Maxsize=50);
~Seqlist(){delete[] data;}
int Find(T &x)const;
int Insert(T &x);
int IsEmpty(){return last==-1;}
int IsFull(){return last==Maxsize-1;}
T Get(int i){return i<0||i>last?NULL:data[i];}
void printf();
void Remove(int i); //删除一个节点
T *data;
int Maxsize;
int last;
};
template <class T> Seqlist<T>::Seqlist(int sz){
last=-1;
Maxsize=sz;
data=new T[Maxsize];
assert(data!=0);
}
template<class T>int Seqlist<T>::Find(T &x)const{
for(int i=0;i<=last;i++)
if(data[i]==x) return 1;
return 0;
}
template <class T>int Seqlist<T>::Insert(T &x){
if(!IsFull())
{
data[last+1]=x;
last=last+1;
return 1;
}
return 0;
}
template<class T>void Seqlist<T>::Remove(int i)//删除一个节点
{ assert(0<=i&&i<=last)
for (int j=i;j<last;j++)
{data[j]=data[j+1];
}
last=last-1;
}
template <class T>void Seqlist<T>::printf(){
if (!IsEmpty())
{
for (int i=0;i<=last;i++)

cout<<data[i];
}

}

template<class T,class DistType >class Graph
{
private:
Seqlist<T> Verlist(int k=50);
DistType Endge[50][50];
int currentEndge;
public:
Graph(int sz=MaxNume);//构造函数
int Findv(const T&verter){return Verlist.Find(T&verter);}//在图中寻找该顶点
int GraphEmpty()const{return Verlist.IsEmpty();}//判断图空否

int GraphFull()const{return Verlist.IsFull()||currentEndge==MaxNume;}
int NumberOfv(){return Verlist.last+1;}
int NumberOfe(){return currentEndge;}
T Getv(int i){ return i>=0&&i<=Verlist.last?Verlist.data[i]:NULL;}//取顶点i

DistType Getweight(int v1,int v2);//取边的权
void InsertV(const T & vertex);//插入一个顶点

void InsertE(int v1,int v2,DistType weight);//插入一条权为weight的边

void RemoveV(int v);//在图中删除顶点和它关联的边
void RemoveE(int v1,int v2);//删除一条边

void CheckGraph();//遍历该图
};
template<class T,class DistType> Graph<T,DistType>::Graph(int sz){
for (int i=0;i<sz;i++)


for (int j=0;j<sz;j++)
{
Endge[i][j]=0;
}
currentEndge=0;
}
template<class T,class DistType> DistType Graph<T,DistType>::Getweight(int v1,int v2)
{
if(v1!=-1&&v2!=-1) return Endge[v1][v2];
else return 0;
}
template<class T,class DistType>void Graph<T,DistType>::InsertV(const T & vertex)
{
Verlist.Insert( vertex);
}
template<class T,class DistType>void Graph<T,DistType>::InsertE(int v1,int v2,DistType weight)
{
if (Endge[v1][v2]==0) Endge[v1][v2]=weight;

}
template<class T,class DistType>void Graph<T,DistType>::RemoveE(int v1,int v2)
{
Endge[v1][v2]=0;
cout<<"该边已删除";
}
template<class T,class DistType>void Graph<T,DistType>::RemoveV(int v)
{

Verlist.Remove();
for (int col=0;col<=Verlist.last;col++)
{
Endge[v][col]=0;
Endge[col][v]=0;
}
Endge[v][v]=200000;

}


template<class T,class DistType>void Graph<T,DistType>::CheckGraph(){
Verlist.printf();
for (int i=0;i<=Verlist.last;i++)

for(int j=0;j<=Verlist.last;j++)
{
if(Endge[i][j]!=0)
cout<<Verlist.data[i]<<Verlist.data[j];
cout<<endl;
}

}
int main()
{
Seqlist<char> ;
Graph<char,int> graph1(5);
cout<<"请输入要加入的顶点";
char x;
cin>>x;
graph1.InsertE(1,2,3);
graph1.InsertV(x);// 为什么加这个语句后就有错误??
return 0;
}
...全文
108 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-04-24
  • 打赏
  • 举报
回复
那就是insert函数出错了,可能插入的有问题,看是否是内存出错了。
weixiaoshashou 2010-04-24
  • 打赏
  • 举报
回复
帮你顶一下吧,不然沉了。
arong1234 2010-04-24
  • 打赏
  • 举报
回复
你什么错误得都不说别人难道肉眼就看出错误?
wzywsk 2010-04-24
  • 打赏
  • 举报
回复
那可能是graph1.InsertV()出问题了~~自己检查下吧
sixbusy 2010-04-24
  • 打赏
  • 举报
回复
Seqlist<T> Verlist(int k=50);
这句语句的意思好像是
你定义了一个函数 名字叫 Verlist(int k=50) , 而 Verlist 的返回类型正好又是 Seqlist<T>, 所以你调用Seqlist 的函数 都没有错!
确实 问题难以找到 !
谢谢 tajon1226 给我的提示!
走好每一步 2010-04-24
  • 打赏
  • 举报
回复
#include <cassert>
#include <iostream>

using namespace std;

const int MaxNumv=50;
const int MaxNume=50;

template<class T>
class Seqlist{
public:
Seqlist(int Maxsize=50);
~Seqlist(){delete[] data;}
int Find(T &x)const;
int Insert(const T &x); //一般引用能用const就用。
int IsEmpty(){return last==-1;}
int IsFull(){return last==Maxsize-1;}
T Get(int i){return i<0||i>last?NULL:data[i];}
void printf();
void Remove(int i); //删除一个节点
T *data;
int Maxsize;
int last;
};
template <class T>
Seqlist<T>::Seqlist(int sz){
last=-1;
Maxsize=sz;
data=new T[Maxsize];
assert(data!=0);
}
template<class T>
int Seqlist<T>::Find(T &x)const{
for(int i=0;i<=last;i++)
if(data[i]==x) return 1;
return 0;
}
template <class T>
int Seqlist<T>::Insert(const T &x){
if(!IsFull())
{
data[last+1]=x;
last=last+1;
return 1;
}
return 0;
}
template<class T>
void Seqlist<T>::Remove(int i)//删除一个节点
{ assert(0<=i&&i<=last)
for (int j=i;j<last;j++)
{data[j]=data[j+1];
}
last=last-1;
}
template <class T>
void Seqlist<T>::printf(){
if (!IsEmpty())
{
for (int i=0;i<=last;i++)

cout<<data[i];
}

}

template<class T,class DistType >
class Graph
{
private:
//不能在派生类中初始化对象,在派生类构造函数中初始化
Seqlist<T> Verlist;
DistType Endge[50][50];
int currentEndge;
public:
Graph(int sz=MaxNume);//构造函数
int Findv(const T&verter){return Verlist.Find(T&verter);}//在图中寻找该顶点
int GraphEmpty()const{return Verlist.IsEmpty();}//判断图空否

int GraphFull()const{return Verlist.IsFull()||currentEndge==MaxNume;}
int NumberOfv(){return Verlist.last+1;}
int NumberOfe(){return currentEndge;}
T Getv(int i){ return i>=0&&i<=Verlist.last?Verlist.data[i]:NULL;}//取顶点i

DistType Getweight(int v1,int v2);//取边的权
void InsertV(const T & vertex);//插入一个顶点

void InsertE(int v1,int v2,DistType weight);//插入一条权为weight的边

void RemoveV(int v);//在图中删除顶点和它关联的边
void RemoveE(int v1,int v2);//删除一条边

void CheckGraph();//遍历该图
};
template<class T,class DistType>
Graph<T,DistType>::Graph(int sz):Verlist(50){
for (int i=0;i<sz;i++)


for (int j=0;j<sz;j++)
{
Endge[i][j]=0;
}
currentEndge=0;
}
template<class T,class DistType>
DistType Graph<T,DistType>::Getweight(int v1,int v2)
{
if(v1!=-1&&v2!=-1) return Endge[v1][v2];
else return 0;
}
template<class T,class DistType>
void Graph<T,DistType>::InsertV(const T & vertex)
{
Verlist.Insert(vertex);
}
template<class T,class DistType>
void Graph<T,DistType>::InsertE(int v1,int v2,DistType weight)
{
if (Endge[v1][v2]==0) Endge[v1][v2]=weight;

}
template<class T,class DistType>
void Graph<T,DistType>::RemoveE(int v1,int v2)
{
Endge[v1][v2]=0;
cout<<"该边已删除";
}
template<class T,class DistType>
void Graph<T,DistType>::RemoveV(int v)
{

Verlist.Remove();
for (int col=0;col<=Verlist.last;col++)
{
Endge[v][col]=0;
Endge[col][v]=0;
}
Endge[v][v]=200000;

}


template<class T,class DistType>
void Graph<T,DistType>::CheckGraph(){
Verlist.printf();
for (int i=0;i<=Verlist.last;i++)

for(int j=0;j<=Verlist.last;j++)
{
if(Endge[i][j]!=0)
cout<<Verlist.data[i]<<Verlist.data[j];
cout<<endl;
}

}


int main()
{
Seqlist<char> ;
Graph<char,int> graph1(5);
cout<<"请输入要加入的顶点";
char x;
cin>>x;
graph1.InsertE(1,2,3);
graph1.InsertV(x);// 为什么加这个语句后就有错误??
// 因为函数参数不匹配,你定义InsertV就用了const,而Seqlist却没用。
// 帮你改了
// 非const&可以传给const&,const&不可以传给非const&。
return 0;
}

65,210

社区成员

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

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