标题:代码报错,但是不知道原因,求大神指点迷津
取消只看楼主
zggdsgs
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-4-6
结帖率:100%
已结贴  问题点数:20 回复次数:2 
代码报错,但是不知道原因,求大神指点迷津
这是什么意思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 编辑 ]
搜索更多相关主题的帖子: resolution convert include cannot source 
2015-06-17 10:33
zggdsgs
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-4-6
得分:0 
回复 2楼 诸葛欧阳
但是我之前已经改过一次了啊,还是报同样的错误,而且报的是switch里面的ListInsert_Sq(L,  i,  e);和:ListDelete_Sq(L,  i,  e); 这样引用函数不对吗

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;
2015-06-17 12:59
zggdsgs
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-4-6
得分:0 
回复 2楼 诸葛欧阳
直接删了e在函数里定义就可以了,谢啦
2015-06-17 13:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-446687-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.179333 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved