蒟蒻求助,compile error

P3613 【深基15.例2】寄包柜

WYHfighting @ 2021-02-04 11:14:30

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int a[100005];
    node* next; 
}node,*LinkList;
LinkList L;

void CreatListHead()
{
    LinkList p;
    int i;
    L=(LinkList)malloc(sizeof(node));
    L->next=NULL;
    for(i=1;i<=100000;i++)
    {
        p=(LinkList)malloc(sizeof(node));
        p->next=L->next;
        L->next=p;
    }
}
void ListInsert(int i,int j,int e)
{
    int num;
    LinkList p,s;
    p=L;
    num=1;
    while(p&&num<i)
    {
        p=p->next;
        ++num;
    }
    p->a[j]=e;
}
int GetElem(int i,int n)
{
    int j=1;
    LinkList p;
    p=L;
    while(p&&j<i)
    {
        p=p->next;
        j++;
    }
    return p->a[n];
}
int main(){
    int n,m,sign,i,j,k;
    scanf("%d%d",&n,&m);
    CreatListHead();
    while(m--)
    {
        scanf("%d",&sign);
        if(sign==1)
        {
            scanf("%d%d%d",&i,&j,&k);
            ListInsert(i,j,k);
        }
        else
        {
            scanf("%d%d",&i,&j);
            k=GetElem(i,j);
            printf("%d\n",k);
        }
    }
    return 0;
}

我模仿《大话数据结构》这本书上写的链表,但是提交时会出现这个错误: /tmp/compiler_7z6___il/src:6:2: 错误:未知的类型名‘node’ node* next; 求助大佬,应该怎么改


by Terrible @ 2021-02-04 11:28:15

我这里C++和C编译都是对的


by WYHfighting @ 2021-02-04 11:51:06

@Terrible /tmp/compiler_068u_26n/src:6:5: 错误:未知的类型名‘node’ node* next; ^~~~

/tmp/compiler_068u_26n/src: 在函数‘CreatListHead’中:

/tmp/compiler_068u_26n/src:20:16: 警告:assignment to ‘int ’ from incompatible pointer type ‘LinkList’ {或称 ‘struct node ’} [-Wincompatible-pointer-types] L->next=p; ^

/tmp/compiler_068u_26n/src: 在函数‘ListInsert’中:

/tmp/compiler_068u_26n/src:31:10: 警告:assignment to ‘LinkList’ {或称 ‘struct node ’} from incompatible pointer type ‘int ’ [-Wincompatible-pointer-types] p=p->next; ^ /tmp/compiler_068u_26n/src:26:16: 警告:未使用的变量‘s’ [-Wunused-variable] LinkList p,s; ^ /tmp/compiler_068u_26n/src: 在函数‘GetElem’中: /tmp/compiler_068u_26n/src:43:10: 警告:assignment to ‘LinkList’ {或称 ‘struct node ’} from incompatible pointer type ‘int ’ [-Wincompatible-pointer-types] p=p->next; ^


by WYHfighting @ 2021-02-04 11:52:13

@Terrible 我提交是这样的; ?


by Terrible @ 2021-02-04 13:07:05

@WYHfighting

我是说我这里本地可以编译,但是洛谷IDE是不行的。(可能本地编译器默认了许多东西)

node既是类型名又是变量名,LinkList是指针变量名,而不是类型名。很明显是有问题。

如果书上这么写的话,可能有他自己的道理,我这里的编译器就编译成功了。不过洛谷的话重写一下吧。


by WYHfighting @ 2021-02-04 14:00:17

@Terrible 应该怎么改呢? 我就是按书上讲的自己写成这样,本地也通过了。

LinkList应该没问题,我在网上搜到过这种用法的解释,他是这样说的:

typedef int INT,LPINT; 前面那个你懂得,我讲述后面那个,你可以这么理解 LPINT前面有个号说明是用来定义指针 变量的,因为 int 等价于LPINT 所以LPINT加上间访内存后才于int等价,所以LPINT等价于: int ;例如 int a;等价于 LPINT a;

我理解就是在定义结构体node时,不能使用定义的node类型;

就是我一开始写定义结构体是这样的:

typedef struct
{
    int a[100005];
    node* next; 
}node,*LinkList;

本地也显示了类似的错误; 然后我在struct后面加上了node本地就能过了,但是洛谷还是过不了。

typedef struct node
{
    int a[100005];
    node* next; 
}node,*LinkList;

by WYHfighting @ 2021-02-04 14:03:24

@Terrible 网上解释的格式是

typedef int INT,*LPINT;

不用代码表示洛谷会把那个星号消掉


by WYHfighting @ 2021-02-04 14:04:55

@Terrible 就是```c LinkList s;等价于 node* s;


by Terrible @ 2021-02-04 15:11:19

@WYHfighting

C语言和特殊用法我也不是很精通,你自己在IDE里面试试改改,编译一下,网上的标准不一定能在洛谷编译通过,评测机语言环境。

洛谷IDE


by WYHfighting @ 2021-02-04 16:49:55

@Terrible 好的,谢谢你!


|