本人菜鸟,有一个问题!
int ListInsert(DLinkList *&L,int i,char e)
{
int j=0;
DLinkList *p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
s=(DLinkList *)malloc(sizeof(DLinkList ));
s->data=e;
s->next=p->next;
if(p->next!=NULL) p->next->prior=s;
s->prior=p;
p->next=s;
return 1;
}
}
void main()
{
DLinkList *h;
char e;
printf("初始化双链表h\n");
InitList(h);
printf("依次插入a,b,c,d,e元素\n");
ListInsert(h,1,'a');
}
编译错误如下,各位帮我看看哪不对?
Compiling...
exp2_3.cpp
E:\数据结构上机指导\proj2_3\exp2_3.cpp(27) : error C2664: 'ListInsert' : cannot convert parameter 3 from 'const char' to 'char &'
A reference that is not to 'const' cannot be bound to a non-lvalue
[解决办法]
#include<stdio.h>
#include<malloc.h>
//增加的
struct DLinkList
{
char data;
DLinkList *next;
DLinkList *prior;
};
int ListInsert(DLinkList *&L,int i,char e)
{
int j=0;
DLinkList *p=L,*s;
while(j <i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
s=(DLinkList *)malloc(sizeof(DLinkList ));
s->data=e;
s->next=p->next;
if(p->next!=NULL) p->next->prior=s;
s->prior=p;
p->next=s;
return 1;
}
}
void InitList(DLinkList *p){}//增加的
void main()
{
DLinkList *h;
char e;
printf("初始化双链表h\n");
InitList(h);
printf("依次插入a,b,c,d,e元素\n");
ListInsert(h,1,'a');
}
代码给你补充了下 这样在vc6下编译没错
所以不知道你是什么问题
[解决办法]
int ListInsert(DLinkList *&L,int i,char e)
{
int j=0;
DLinkList *p=L,*s;
while(j <i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
s=(DLinkList *)malloc(sizeof(DLinkList ));
s->data=e;
s->next=p->next;
if(p->next!=NULL) p->next->prior=s;
s->prior=p;
p->next=s;
return 1;
}
}
void main()
{
DLinkList *h;
char e;
printf("初始化双链表h\n");
InitList(h);
printf("依次插入a,b,c,d,e元素\n");
e = 'a';
ListInsert(h,1,e);
}
[解决办法]
algo2_3.cpp中:
int ListInsert(DLinkList *&L,int i,char e)
main中:
extern int ListInsert(DLinkList *L,int i,ElemType &e);
第一个参数和第三个参数申明不一致。
将main中改成extern int ListInsert(DLinkList *&L,int i,ElemType e);就可以了
[解决办法]
而且你要是想第三个参数为引用的话(ElemType &e),那么你在main中不能直接写ListInsert(h,1,'e'); 这样会报错,因为不能将const char转化成char &
。
char c = 'e';
ListInsert(h,1,c); 这样就可以了