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 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败