2201_75522822 2023-03-21 17:50 采纳率: 66.7%
浏览 25
已结题

“SqList”:redefinition;different basic types的问题

“SqList”:redefinition;different basic types的问题,还有一堆type 'SqList' does not have an overloaded member 'operator ->'以及cannot convert parameter 1 from 'SqList' to 'SqList *'的问题。数据结构顺序表内容。

#include<stdio.h>
#include<stdlib.h>
#include"SqList.h"
#define MaxSize 100
#define TRUE 1
#define FALSE 0

typedef char ElemType;
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

//初始化
void InitList_Sq(SqList*L)
{
    L->length=0;
}
//写入元素
void WriteList_Sq(SqList &L)
{
    int i;
    printf("请输入你要写入顺序表的元素的长度:");
    scanf("%d", &L->length);
    printf("请输入%d个你要放入顺序表里的元素:",L->length);
    for (i = 0; i < L->length; i++)
        scanf("%s", &L->data[i]);
}

//输出顺序表
void ListTraverse_Sq(SqList*L)
{
    int i;
    for(i=0;i<L->length;i++)
    {
        printf("输出顺序表:%s ",L->data[i]);
    }
    printf("\n");

}

//输出顺序表的长度
int ListLength_Sq(SqList*L)
{
    printf("此时的顺序表长度为:%d",L->length);
}

//判断顺序表是否为空
bool ListEmpty_Sq(SqList*L)
{
    printf("将判断顺序表是否为空:(TRUE or FALSE)");
    if(L->length==0)
        return TRUE;
    else
        return FALSE;
        
}

//按位序查找元素
char GetList_Sq(SqList*L)
{
    int i;
    printf("输入你想要查找的元素的位序:%d\n",i);
    scanf("%d",&i);

    printf("你要查找的第%d个元素是:%s\n",i,L->data[i]);
}

//输出元素的逻辑位置
int LocateElem_Sq(SqList*L,ElemType e)
{
    int i=0;
    while(i<L->length && L->data[i]!=e)
        i++;
    if(i<L->length)
        return i+1;
    else
        printf("该元素不存在!");
        return 0;
}

//插入元素
bool ListInsert_Sq(SqList*L,int i, ElemType e)
{
    int j;
    if(i<1 || i>L->length+1 || L->length>=MaxSize)
        return FALSE;
    i--;
    for(j=L->length;j>i;j--)
    {
        L->data[j]=L->data[j-1];
    }
    L->data[i-1]=e;
    L->length++;
    return TRUE;
}

//删除元素
bool ListDelete_Sq(SqList *&L,int i)
{
    int j;
    ElemType &e;
    if( (i<1) || (i>L->length) )
        return FALSE;
    i--;
    e=L->data[i];

    for(j=i;j<L->length-1;j++)
    {
        L->data[j]=L->data[j+1];
    }
    L->length--;
    return TRUE;
}

//释放顺序表
void DestroyList_Sq(SqList *&L)
{
    free(L);
}



int main()
{
    SqList L;
    int i=0,k;
    char e1,e2;

    InitList_Sq(L);
    WriteList_Sq(L);
    ListTraverse_Sq(L);
    ListLength_Sq(L);
    ListEmpty_Sq(L);
    GetList_Sq(L);

    printf("请输入你要查找位置的元素值:%s",e1);
    scanf("%s",&e1);
    LocateElem_Sq(L,e1);

    printf("请输入你想要在哪一个位置之前插入新的元素:");
    scanf("%d",&i);
    printf("请输入你想要插入的新的元素:");
    scanf("%s",&e2);
    ListInsert_Sq(L,i,e2);

    ListTraverse_Sq(L);

    printf("请输入你要删除的元素的逻辑位序:");
    scanf("%d",&k);
    ListDelete_Sq(L,k);

    ListTraverse_Sq(L);
    DestroyList_Sq(L);
}

  • 写回答

2条回答 默认 最新

  • juechen333 后端领域优质创作者 2023-03-21 18:12
    关注

    如有用,请采纳,谢谢
    "SqList":redefinition;different basic types的问题:
    这个问题是因为在头文件SqList.h中,已经定义了一个名为"typedef struct SqList"的结构体,而在主函数中又使用了相同的名称去定义SqList结构体,导致了重复定义的问题。解决办法是在主函数中改变SqList的命名,或者在头文件SqList.h中使用预处理指令,例如 #ifndef、#define、#endif,来避免重复定义。
    type 'SqList' does not have an overloaded member 'operator ->'的问题:
    这个问题是因为在程序中出现了"->"运算符,但是SqList是一个结构体类型,而不是指针类型,因此不能使用"->"运算符。解决办法是将"->"运算符改为"."运算符。
    主要的问题有
    1."SqList"的重新定义;不同的基本类型
    在代码开头,使用了"typedef struct {...} SqList;"进行结构体的定义。但在后面的代码中,又用"typedef char ElemType;"对"ElemType"进行了重新定义。这个问题可能会导致编译错误。
    2.函数参数类型不匹配
    在函数参数中,有的使用了指针类型(如InitList_Sq、ListTraverse_Sq),有的使用了引用类型(如WriteList_Sq)。这些不匹配的类型会导致编译错误。
    3.输出格式问题
    在ListTraverse_Sq函数中,输出顺序表时,应该使用"%c"而不是"%s",因为ElemType被定义为char类型。
    4.函数返回值类型不匹配
    在ListLength_Sq函数中,应该返回int类型的值,但是却没有返回值。
    5.bool类型返回值问题
    在ListEmpty_Sq函数中,返回bool类型的值。在一些编译器中,可能需要在函数定义前添加"typedef int bool;",以便使bool类型能够被正确解析。
    6.GetList_Sq函数的返回值问题
    GetList_Sq函数应该返回char类型的值,但是却没有返回值。
    7.函数返回值缺失
    在LocateElem_Sq函数中,如果元素不存在,应该返回0,但是却没有返回值。
    8.形参和实参类型不匹配
    在ListInsert_Sq函数中,第一个参数的类型是SqList*,但在调用函数时,使用了SqList类型的实参。
    9.无法重载"operator ->"
    在ListDelete_Sq函数中,对SqList类型的指针进行操作时,出现了"cannot convert parameter 1 from 'SqList' to 'SqList *'"的错误。可能是因为没有重载"operator ->"。
    10.释放顺序表的错误
    在DestroyList_Sq函数中,使用了free函数释放了顺序表的内存。但是,在顺序表的初始化中,并没有使用malloc或calloc来分配内存。这可能会导致运行时错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月25日
  • 已采纳回答 3月25日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制