代码报错,但是不知道原因,求大神指点迷津
这是什么意思error C2664: 'ListInsert_Sq' : cannot convert parameter 3 from 'int' to 'ElemType'No constructor could take the source type, or constructor overload resolution was ambiguous
代码:
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量
#define LINSTINCREMENT 1 //线性表存储空间的分配增量
typedef int Status;
typedef struct {
char name[20];
int num;
float score;
}ElemType;
typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList; SqList L;
void main()
{int i,j;
ElemType e;
Status InitList_Sq(SqList &L);
Status creat(SqList &L);
Status abc(SqList &L);
Status ListDelete_Sq(SqList &L, int i, ElemType &e);
Status ListInsert_Sq(SqList &L, int i, ElemType e);
printf("\t\t请选择对顺序表的操作,操作菜单如下: \n");
printf("\t\t*************************************************\n");
printf("\t\t 1 建立顺序表(C) \n");
printf("\t\t 2 初始化顺序表(N) \n");
printf("\t\t 3 顺序表中插入元素(I) \n");
printf("\t\t 4 数据表中删除元素(D) \n");
printf("\t\t 5 退出系统(E) \n");
printf("\t\t*************************************************\n");
printf("\t\t作者:HLX \n");
while(j!=5){
printf("\n选择进行的操作:");
do{
scanf("%d",&j);
if(j<1||j>5)
printf("输入错误,重新输入正确的数字\n");
}while(j<1||j>5);
switch(j){
case 1:creat(L);
break;
case 2:InitList_Sq(L);
break;
case 3:ListInsert_Sq(L, i, e);
break;
case 4:ListDelete_Sq(L, i, e);
break;
case 5:exit(0);
break;
}
}
}
Status InitList_Sq(SqList &L){
//构造一个新的线性表L。
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (L.elem==0){
printf("存储分配失败\n");
return 0;
}
else{
L.length = 0; // 空表长度为0
L.listsize = LIST_INIT_SIZE; // 初始存储容量
}
return 1;
}
Status creat(SqList &L){
int i,n;
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
do{
printf("请输入学生的个数:");
scanf("%d",&n);
if(n<1||n>LIST_INIT_SIZE)
printf("输入错误,请重新输入");
}while(n<1||n>LIST_INIT_SIZE);
for(i=0;i<n;i++) //读入元素
scanf("%s%d%f",&L.elem[i].name,&L.elem[i].num,&L.elem[i].score);
L.length =n;
for(i=0;i<L.length;i++) //利用循环输出元素
printf("%d ",L.elem[i].name,L.elem[i].num,L.elem[i].score);
return 0;
}
Status ListInsert_Sq(SqList &L, int i, ElemType e){ // 在线性表L中插入新的元素e
ElemType *p;
int j,num,*newbase;
char nam;
float sco;
printf("请输入你要插入的数据");
scanf("%s%d%f",&nam,&num,&sco);
do{ //输入数据插入的位置直到输入正确的位置
printf("请输入你要插入的位置");
scanf("%d",&i);
if(i<1 || i>L.length+1)
printf("请重新输入正确的位置");
}while(i<1 || i>L.length+1);
if (L.length >= L.listsize) {
// 当前存储空间已满,增加容量
ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LINSTINCREMENT)*sizeof (ElemType));
if (newbase==0) return 0; // 存储分配失败
L.elem = newbase; // 新基址
L.listsize += LINSTINCREMENT; // 增加存储容量
}
ElemType *q = &(L.elem[i-1]); // q为插入位置
for (p = &(L.elem[L.length-1]);p>=q;--p) *(p+1) = *p; // 插入位置及之后的元素右移
*q = e; // 插入e
++L.length; // 表长增1
for(i=0;i<L.length;i++) //利用循环输出元素
printf("%d ",L.elem[i].name,L.elem[i].num,&L.elem[i].score);
return 0;
}
Status ListDelete_Sq(SqList &L, int i, ElemType &e)
// 在顺序线性表L中删除第i个元素,并用e返回其值。
{ int j;
ElemType *p, *q;
do{ printf("请输入你需要删除第几个数据");
scanf("%d",&i);
if (i<1 || i>L.length)
printf("请重新输入正确的位置数字"); // i值不合法
}while(i<1 || i>L.length);
p = &(L.elem[i-1]); // p为被删除元素的位置
e = *p; // 被删除元素的值赋给e
q = L.elem+L.length-1; // 表尾元素的位置
for (++p; p<=q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移
--L.length; // 表长减1
for(j=0;j<L.length;j++)
{ printf("%d ",L.elem[j]); }
return 0;
}
[ 本帖最后由 zggdsgs 于 2015-6-17 13:04 编辑 ]