求c++高手,指出错误的地方和原因并帮我修改下

#include<iostream.h>
using namespace std;
template<class type> class List;
/*-----------定义一个Listnode链结点-----------*/
template <class type>
class ListNode
{
friend class List<type> ;
private:
type data ;
ListNode<type> *next;
public:
ListNode():next(NULL){}

};

/*------------链表linklist----*/
template <class type>
class List
{
private:
ListNode<type> *linklist;
public:
List()
{
LinkList =new ListNode<type>(0);
}
List(type value)
{
LinkList =new ListNode<type>(value);
}
~List()
{
delete linklist;
Linklist = NULL ;
}
int InsertOrderNode(type value) // 在ListNode链表中插入s结点元素使之链表有序
{
type temp;
ListNode<type> s = new ListNode<type>(value);
ListNode<type> p = LinkList->next ;
if(NULL = s)
{
cerr << "内存已满";
exit(0)
}

for(;s->data>p->data&&p->next!=NULL;p = p->next)
{
}
if(NULL = p->next)
{
p->next = s;
}
else
{
temp = s->data;
s->data = p->data;
p->data = temp;
s->next = p->next;
p->next = s;
}

return(1)
}
void InitList()
{
int value;
for(int i=0;i<linklist->data;i++)
{
cin>>value;
InsertOrderNode(value);
}
}
void InsertOrderNode( ListNode<type> *s )
{
for(;s->data>p->data&&p->next!=NULL;p = p->next)
{
}
if(NULL = p->next)
{
p->next = s;
}
else
{
temp = s->data;
s->data = p->data;
p->data = temp;
s->next = p->next;
p->next = s;
}
}
void outList()
{
linklist<type> *p = linklist->next;
cout>>"linklist out";
for(;p->next!=NULL;p = p->next)
{
cout>>p->data>>endl ;
}
}
List<type> *operator +(List<type>* Ha,List<type>* Hb)
{
ListNode<type> *p;
for(;Hb->linklist->next! = NULL;)
{
p = Hb->linklist->next;
Ha->InsertOrderNode(p );
}
}

};

int main()
{
int i,Ha_nodecount,Hb_nodecount;
cout<<"Ha链表结点个数";
cin>>Ha_nodecount;
cout<<"Hb链表结点个数";
cin>>Hb_nodecount;
List<int> Ha(Ha_nodecount),Hb(Hb_nodecount);
Ha->initList();
Hb->initList();
Ha = Ha+Hb;
Ha->initlist;
return(1);

}

错误1:List<type> *operator +(List<type>* Ha,List<type>* Hb)
参数太多了,应该只有一个参数,重载运算符+时,当前类作为“+”运算的左操作数,()内的参

数作为右操作数。并且,最好不要用指针作为操作数。可以这样定义:
List<type>operator +(List<type> a)

错误2:ListNode的构造函数定义错误:ListNode():next(NULL){}
可以这样定义:ListNode(type inData)
{data=inData;next=NULL;}
错误3:多处变量的大小写拼写不一致错误。
错误4:多处将==号误写为=号。
错误5:多处括号包含错误。
错误6:多处将数据和数据的指针混淆。
错误7:多处忘记写分号。
错误8:逻辑错误。
一会我改完了把改好的发上来吧。
下面是修改后的:
#include<iostream.h>
#include<stdlib.h>
//using namespace std;
template<class type> class List;
/*-----------定义一个Listnode链结点-----------*/
template <class type>
class ListNode
{
friend class List<type> ;
private:
type data ;
ListNode<type> *next;
public:
ListNode(type inData)
{
data=inData;
next=NULL;
}

};

/*------------链表linklist----*/
template <class type>
class List
{
private:
ListNode<type> *LinkList;
public:
List()
{
LinkList =new ListNode<type>(0);
}
List(type value)
{
LinkList =new ListNode<type>(value);//第一个结点保存链表中的有效结点个数。
}
~List()
{
// delete LinkList;
// LinkList = NULL ;
}

void InitList()
{
int value;
ListNode<type> *p=LinkList;
for(int i=0;i<LinkList->data;i++)
{
cin>>value;
p->next=new ListNode<type>(value);
p=p->next;
}
}

int InsertOrderNode(type value) // 在ListNode链表中插入s结点元素使之链表有序
{
ListNode<type> *s = new ListNode<type>(value);
if(NULL == s)
{
cerr << "内存已满";
exit(0);
}
if(!LinkList->data)//原来类中结点数为0
{
LinkList->next=s;
LinkList->data++;
}
else
{
ListNode<type> *p = LinkList->next;
ListNode<type> *temp;
int flag=0;
if(p->data>=s->data)
{
LinkList->next=s;
LinkList->next->next=p;
LinkList->data++;
flag=1;
}
else
{
for(;p->next!=NULL;p = p->next)
if(p->next->data >= s->data)
{
temp=p->next;
p->next=s;
s->next=temp;
LinkList->data++;
flag=1;
break;
}

}
if(!flag)//已径到最末端了,将结点插入到末端
{
p->next=s;
LinkList->data++;
}
}
return(1);
}
ListNode<type> *InsertOrderNode( ListNode<type> *s )
{
ListNode<type> *p = s;
ListNode<type> *tempq,*q = new ListNode<type>(s->data);
tempq=q;
while(p=p->next)
{
tempq->next=new ListNode<type>(p->data);
tempq=tempq->next;
}
p = LinkList->next;
ListNode<type> *mainLink,*subLink;
ListNode<type> *tempML;
if(!LinkList->data)//原来类中结点数为0
{
LinkList->next=q;
LinkList->data++;
subLink=q;
while(subLink=subLink->next)
LinkList->data++;//把末尾增加的结点数也计入结点个数中
}
else
{
LinkList->data=0;
int flag=0;
if(p->data>=q->data)
{
mainLink=LinkList->next=q;
subLink=p;
LinkList->data++;//结点数加1
}
else
{
mainLink=LinkList->next=p;
subLink=q;
LinkList->data++;
}
while(mainLink->next)
{
tempML=mainLink;
mainLink=mainLink->next;
if(mainLink->data > subLink->data)
{
tempML->next=subLink;
tempML=mainLink;
mainLink=subLink;
subLink=tempML;
LinkList->data++;//结点数加1
}
if(!mainLink->next)//后面没有结点了
flag=1;
}
if(flag)
{
mainLink->next=subLink;
LinkList->data++;
while(subLink=subLink->next)
LinkList->data++;//把末尾增加的结点数也计入结点个数中
}
}
return LinkList;

}
void outList()
{
ListNode<type> *p = LinkList->next;
cout<<"linklist out"<<endl ;
for(;p!=NULL;p = p->next)
{
cout<<p->data<<endl ;
}
}

ListNode<type> * GetLinkList()
{
return LinkList;
}
List<type> operator +(List<type> Hb)
{
List<type> *plst=new List<type>;
if(this->LinkList->next)
plst->InsertOrderNode(this->LinkList->next);
if(Hb.GetLinkList()->next)
plst->InsertOrderNode(Hb.GetLinkList()->next);

return *plst;
}
};

int main()
{
int Ha_nodecount,Hb_nodecount;

cout<<"输入Ha链表结点个数:"<<endl;
cin>>Ha_nodecount;
List<int> Ha(Ha_nodecount);
cout<<"输入Ha链表各结点:"<<endl;
Ha.InitList();

cout<<"输入Hb链表结点个数:"<<endl;
cin>>Hb_nodecount;
List<int> Hb(Hb_nodecount);
cout<<"输入Hb链表各结点:"<<endl;
Hb.InitList();

Ha.outList();
Hb.outList();
Ha = Ha+Hb;
cout<<"Ha = Ha+Hb:"<<endl;
Ha.outList();
return(1);
}
重新编译一下便可运行,不知是不是和楼主本来要编写的目的一样。
修改比重新编写还要麻烦。追问

List类的析构函数中的delete 后面要加[ ]么 单链表的析构函数是怎样的啊

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-22
现在的问题是什么?程序太长,自己先编译一下看看结果追问

错误太多了编译的错误修改不出来

第2个回答  2011-07-22
这程序来点注释呗,看得眼睛疼

C++这代码为什么答案错误?指出并改正,好的加分!!!
很明显这里的条件判断语句有问题,不符合程序设计者的目的。第二个if语句,其目的是判断输入数是否可被5或6整除,而语句“(b==0&&c!=0)||(b!=0&&c==0)”则在判断此数是否是:能被5整除而不能被6整除的数,或,能被5整除而不能被6整除的数。那么显然这里如果输入30的倍数就会得到错误的结...

c++高手帮忙在下面的题目里找出错误的地方,为什么运行不了。急!在线...
运行结果出错的原因是:每一次输入的运算符赋值给sign后,if语句表达式的值都将为真.

菜鸟新学c++。求高手鉴定这道c++题目我哪里做错了,应该怎么改怎么做...
1、当n很大时(如99998),a1和a2的取值超出了double的范围。2、{for(b=1,a1=1,a2=2;b<=n;b++)语法错误。3、for循环中只有分子的值做了对应修改,分母的值未做对应修改。我修改了以下你看看可以不。#include <iostream> include <iomanip> using namespace std;int main(){ double r[999...

求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错...
你有几个地方有错误:1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值 2.既然你已经定了个位为7,直接给m赋7就可以了吧。3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n\/=10,开始应该用个变量保存这个n的值 4.还...

求c++编程高手指点,指出我的代码错误的地方以及给出改正,谢谢。题目要 ...
是不是报无匹配的构造函数?main函数中Work w;有问题 如果用户自己定义了构造函数,则系统中默认的构造函数将不会调用,要么自己写一个无形参的构造函数,要么把w改成w(n,s)括号中的实参分别对应成员数据int num,ID;char sex;

c++判断正负数 为什么我写的输出错误 能帮我指出错误在那么?非常感谢...
\/n不对,回车号是 \\n 你输入的就是不对嘛, if(a=0)这个条件总不成立,输出成 “\/n0是负数”两类错误,一类是表达式错 a==0 被写作了a=0 另一类是输出格式的转义字符,是反斜杠\\ 写作了斜杠\/

跪求大神找出此C++程序的error,并加以改正(最好自己先调试),本人新人...
看来你是新手哦,都是一些小错误,错误在我的程序中说明了,加油!!有希望成为高手的 include<iostream>using namespace std;int main(){ int year,month,date,result; cout<<"请输入年份:"<<endl; cin>>year; if(year%4==0&&year%100!=0||year%400==0) {\/\/这个地方添...

c语言解决随机数问题:请高手帮忙看看错在哪?如何修改?谢啦!
首先,C语言的所有变量必须在程序的一开始就定义,也就是说,在for语句中是不能定义m和n的。其次,不能重复定义变量,即使在C++中,int k这个语句也会报错,因为每执行一次for循环就会定义一次k。这是不允许的。最后,p[N][N]=k,改为*p[m][n]=k。既然N做宏代换等于10,p[10][10]显然是...

求帮忙修改c++程序,下面是用栈计算后辍表达式值的程序,请把错误和为...
你的代码只要支持1位数的加减乘除吗?你的代码错误很多,声明和调用混乱,还有一些其他语法和逻辑错误。我时间不多,只改了程序,没时间加注释和说明了。你使用UltraCompare对比程序查找修改部分吧。include "stdio.h"include "stdlib.h"include "string.h"include "malloc.h"typedef int DataType;struct ...

c++程序的代码错误,请帮忙纠正以下并注解,还会出先这两个错误,求解
1. 你说是代码的错误,可是却不贴出你的代码,让人怎么帮你解答代码的错误呢?所以注解更加不可能了。请在篇幅允许的情况下尽可能完整地贴出代码,以便检查是否是代码问题。2. VS 提示”发生生成错误,是否继续并运行上次的成功生成”这个应该是你的VS出了问题,请重新启动你VS。如果你安装的是VS2008...

相似回答
大家正在搜