“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
#include
#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;ilength;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(ilength && L->data[i]!=e)
        i++;
    if(ilength)
        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;jlength-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);
}

如有用,请采纳,谢谢
"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来分配内存。这可能会导致运行时错误。

#include"SqList.h"
然后第9行又定义一个SqList结构,应该有重复定义了