c语言中[Error] variable or field 'CreatList' declared void错误原因分析

本文介绍了一个简单的单链表创建及遍历程序,并详细展示了如何修正代码使其能够正确运行。通过对比错误代码和修改后的正确代码,帮助读者理解在C语言中正确声明结构体类型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <stdlib.h>

struct LNode{
    int data;
    LNode *next;
}*List,LNode;



void CreatList(List &L, int n){//创建一个含有n个元素的单链表
   List p;
   L=(List)malloc(sizeof(struct LNode));
    L->next=NULL;//创建头节点
    for(int i=1;i<=n;i++){
        p=(List)malloc(sizeof(struct LNode));
        scanf("%d",&p->data );
        p->next=L->next;
        L->next=p;//尾部插入法 
    } 
} 


void Traverse(List L2){
    while(L2){
      L2=L2->next;
       printf("%d",L2->data );
    }   
}



int main(){
    List L1;
    int a;
    printf("请输入元素的个数:");
    scanf("%d",&a);
    CreatList(L1,a);
    Traverse(L1);
    return 0;
}

这是最初的代码,编译不出来,出现下边的提示:

  1. [Error] variable or field ‘CreatList’ declared void
  2. [Error] ‘L’ was not declared in this scope
  3. [Error] expected primary-expression before ‘int’

经过一番分析,终于找到了错误之处,下边是正确的代码

#include <stdio.h>
#include <stdlib.h>

typedef struct LNode{
    int data;
    LNode *next;
}*List,LNode;



void CreatList(List &L, int n){//创建一个含有n个元素的单链表
   List p;
   L=(List)malloc(sizeof(struct LNode));
    L->next=NULL;//创建头节点
    for(int i=1;i<=n;i++){
        p=(List)malloc(sizeof(struct LNode));
        scanf("%d",&p->data );
        p->next=L->next;
        L->next=p;//尾部插入法 
    } 
} 


void Traverse(List L2){
    while(L2){
      L2=L2->next;
       printf("%d",L2->data );
    }   
}



int main(){
    List L1;
    int a;
    printf("请输入元素的个数:");
    scanf("%d",&a);
    CreatList(L1,a);
    Traverse(L1);
    return 0;
}

改进的办法就是把定义链表的语句改为:

typedef struct LNode{
    int data;
    LNode *next;
}*List,LNode;

而第一个代码却是:

struct LNode{
    int data;
    LNode *next;
}*List,LNode
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱码仕1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值