首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

本人初学者,有一个有关问题

2012-11-04 
本人菜鸟,有一个问题!int ListInsert(DLinkList *&L,int i,char e){int j0DLinkList *pL,*swhile(ji-

本人菜鸟,有一个问题!
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); 这样就可以了

热点排行