“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结构,应该有重复定义了