为了账号安全,请及时绑定邮箱和手机立即绑定

错误提示 不允许使用不完整的类型 ?老是遇到这样的问题,求指点

错误提示 不允许使用不完整的类型 ?老是遇到这样的问题,求指点

冉冉说 2023-04-03 16:12:46
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct info{int no;char name[20];int depno;int salary;}StaffBill;typedef struct LNode{StaffBill data;struct LNode * next;}LinkList;void CreateList(LinkList * &L, StaffBill a [], int n); //函数原型void DispList(LinkList * L);void CreateList(LinkList * &L, StaffBill a [], int n) //尾插法建链表L{LinkList * s, *r;int i;L = (LinkList *) malloc(sizeof(LinkList));r = L;for (i = 0; i < n; i++){s = (LinkList *) malloc(sizeof(LinkList));s->data = a[i];r->next = s;}r->next = NULL;}void DispList(LinkList * L) //输出链表L{LinkList * p = L->next;while (p != NULL){printf("%d %s %d %d", p->data.no, p->data.name, p->data.depno, p->data.salary);p = p->next;}printf("/n");}void main(){struct StaffBill Info[3] = { {33541, "德维恩.韦德", 003, 115500}, //这里有错误提示:1 IntelliSense: 不允许使用不完整的类型 (具体在Info处){ 33677, "勒布朗.詹姆斯", 006, 150000 },{ 33431, "科比.布莱恩特", 024, 100000 } };LinkList * L;CreateList(L, Info[3], 3); //这里错误提示2 IntelliSense: 表达式必须是指向完整对象类型的指针 (info处)DispList(L);}
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

void CreateList(LinkList * &L, StaffBill a[], int n) //尾插法建链表L

这里的第二个参数是这个结构体数组,所以在实际调用过程中应该以数组名来作为实参即main函数中调用时 直接写成 CreateList(L, Info, 3)即可;此处你定义的结构体数组就三个数据info[0];info[1]以及info[2] ,所以再调用CreateList函数时 使用info[3]会造成数组越界;另外就是 你整个程序中也有许多其他错误,下边是我 改写之后的,你可以做参考
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct info
{
int no;
char name[20];
int depno;
int salary;
}StaffBill;

typedef struct LNode
{
StaffBill data;
struct LNode * next;
}LinkList;

LinkList *CreateList(StaffBill a[], int n); //函数原型
void DispList(LinkList *L);

LinkList *CreateList(StaffBill a[], int n) //尾插法建链表L
{
LinkList *s,*pHead,*pTail;
int i;

pHead = (LinkList *) malloc(sizeof(LinkList));
pTail = pHead;
pTail->next = NULL;

for (i = 0; i < n; i++)
{
s = (LinkList *) malloc(sizeof(LinkList));
s->data = a[i];

pTail->next = s;
s->next = NULL;
pTail = s;
}
return pHead;
}

void DispList(LinkList *L) //输出链表L
{
LinkList* p = L->next;
while (p != NULL)
{
printf("%d %s %d %d\n", p->data.no, p->data.name, p->data.depno, p->data.salary);
p = p->next;
}
printf("\n");
}

void main()
{
StaffBill Info[3] = {
{33541, "德维恩.韦德", 003, 115500},
{ 33677, "勒布朗.詹姆斯", 006, 150000 },
{ 33431, "科比.布莱恩特", 024, 100000 }
};

LinkList *L = NULL;

L = CreateList(Info, 3); //注意这里的实参 为数组名,此时返回的是一个链表
DispList(L);
}

 


查看完整回答
反对 回复 2023-04-05
  • 1 回答
  • 0 关注
  • 356 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信