顺序表编译出错cannot convert parameter 1 from 'SqList' to 'SqList *'
#include<stdio.h>#include<malloc.h>#include"SqList.h"StatusListInsert_Sq(SqList*L,int...
#include<stdio.h>
#include<malloc.h>
#include"SqList.h"
Status ListInsert_Sq (SqList *L ,int i ,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L->length+1 ) return ERROR;
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) return (OVERFLOW);
L->elem=newbase;
L->length=+LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;*q=e;
++L->length;
return OK;
}//ListInsert_Sq
void main()
{
int n,i;
ElemType x;
SqList &l,a;
l=&a;
if(!InitList_Sq(l)) printf("抱歉,顺序表初始化失败!!!\n");
else
{
printf("恭喜您,顺序表初始化成功!\n");
printf("*******创建顺序表!******\n");
printf("输入要建立的顺序表的长度:\n");
scanf("%d",&n);
CreatList_Sq(l,n);
printf("*******输出顺序表:******\n");
TraverList_Sq(l);
printf("下面进行顺序表插入操作:\n");
printf("请输入插入位置i:\n");
scanf("%d",&i);
printf("请输入要插入的元素:\n");
scanf("%d",&x);
if(ListInsert_Sq(l,i,x))
{printf("恭喜您!插入操作成功!\n");
printf("******输出顺序表:******\n");
TraverList_Sq(l);}
else printf("很遗憾,由于您提供的位置不合法,导致顺序表插入失败!!!\n");
}
}
头文件没有问题,就是在编译时出错,说没有为l初始化。下面是编译的提示:
--------------------Configuration: 顺序表插入 - Win32 Debug--------------------
Compiling...
顺序表插入.cpp
E:\study\数据结构\实验练习\顺序表插入.cpp(25) : error C2530: 'l' : references must be initialized
E:\study\数据结构\实验练习\顺序表插入.cpp(26) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'SqList *' (or there is no acceptable conversion)
E:\study\数据结构\实验练习\顺序表插入.cpp(27) : error C2664: 'InitList_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\study\数据结构\实验练习\顺序表插入.cpp(35) : error C2664: 'CreatList_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\study\数据结构\实验练习\顺序表插入.cpp(37) : error C2664: 'TraverList_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\study\数据结构\实验练习\顺序表插入.cpp(43) : error C2664: 'ListInsert_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E 展开
#include<malloc.h>
#include"SqList.h"
Status ListInsert_Sq (SqList *L ,int i ,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L->length+1 ) return ERROR;
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) return (OVERFLOW);
L->elem=newbase;
L->length=+LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;*q=e;
++L->length;
return OK;
}//ListInsert_Sq
void main()
{
int n,i;
ElemType x;
SqList &l,a;
l=&a;
if(!InitList_Sq(l)) printf("抱歉,顺序表初始化失败!!!\n");
else
{
printf("恭喜您,顺序表初始化成功!\n");
printf("*******创建顺序表!******\n");
printf("输入要建立的顺序表的长度:\n");
scanf("%d",&n);
CreatList_Sq(l,n);
printf("*******输出顺序表:******\n");
TraverList_Sq(l);
printf("下面进行顺序表插入操作:\n");
printf("请输入插入位置i:\n");
scanf("%d",&i);
printf("请输入要插入的元素:\n");
scanf("%d",&x);
if(ListInsert_Sq(l,i,x))
{printf("恭喜您!插入操作成功!\n");
printf("******输出顺序表:******\n");
TraverList_Sq(l);}
else printf("很遗憾,由于您提供的位置不合法,导致顺序表插入失败!!!\n");
}
}
头文件没有问题,就是在编译时出错,说没有为l初始化。下面是编译的提示:
--------------------Configuration: 顺序表插入 - Win32 Debug--------------------
Compiling...
顺序表插入.cpp
E:\study\数据结构\实验练习\顺序表插入.cpp(25) : error C2530: 'l' : references must be initialized
E:\study\数据结构\实验练习\顺序表插入.cpp(26) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'SqList *' (or there is no acceptable conversion)
E:\study\数据结构\实验练习\顺序表插入.cpp(27) : error C2664: 'InitList_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\study\数据结构\实验练习\顺序表插入.cpp(35) : error C2664: 'CreatList_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\study\数据结构\实验练习\顺序表插入.cpp(37) : error C2664: 'TraverList_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\study\数据结构\实验练习\顺序表插入.cpp(43) : error C2664: 'ListInsert_Sq' : cannot convert parameter 1 from 'SqList' to 'SqList *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E 展开
3个回答
展开全部
你是C语言还是C++语言啊?
SqList &l,a;
l=&a;
这里&是C++的引用,他要求定义的时候就赋值,就是定义的时候就要明确他是谁的引用。你这里至少也得:
SqList a,&l=a;
如果只是C语言的程序,则不能这种用法,你的使用指针来替换。
你的InitList_Sq等等这些函数都要使用指针,实际使用的时候需要:InitList_Sq(&l)这样就可以了。如果你的l定义成SqList *l;则InitList_Sq(l)。
感觉你是看的C++式的描述伪代码,若是在C语言中,得做些修改的。
你的那些报错,都是说类型转换不成立,需要指针的地方,你传的是值,其实需要一个指针地址。
在C语言里面,&可以是取地址操作符,也可以是逻辑与操作符,没有直接定义的时候放在变量前面的;在C++里面,倒是有作为引用的使用方法,但要求紧跟初始化变量。
SqList &l,a;
l=&a;
这里&是C++的引用,他要求定义的时候就赋值,就是定义的时候就要明确他是谁的引用。你这里至少也得:
SqList a,&l=a;
如果只是C语言的程序,则不能这种用法,你的使用指针来替换。
你的InitList_Sq等等这些函数都要使用指针,实际使用的时候需要:InitList_Sq(&l)这样就可以了。如果你的l定义成SqList *l;则InitList_Sq(l)。
感觉你是看的C++式的描述伪代码,若是在C语言中,得做些修改的。
你的那些报错,都是说类型转换不成立,需要指针的地方,你传的是值,其实需要一个指针地址。
在C语言里面,&可以是取地址操作符,也可以是逻辑与操作符,没有直接定义的时候放在变量前面的;在C++里面,倒是有作为引用的使用方法,但要求紧跟初始化变量。
追问
我是用的c语言的谢谢啦
展开全部
cannot convert parameter 1 from 'SqList' to 'SqList *& ' 你在往创建链表函数传递参数时写的是结点指针的引用。而你main函数里体用该函数时写的,vFplkz
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询