猿问

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

#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);
}

冉冉说
浏览 357回答 1
1回答

慕虎7371278

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);}&nbsp;
随时随地看视频慕课网APP
我要回答