error: request for member 'next' in something not a structure or union.What does that mean?
error: request for member 'next' in something not a structure or union.What does that mean?
我一直在使用链表进行训练,并且编写了以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *ptr;
struct node
{
int element;
ptr next;
};
typedef ptr list;
typedef ptr position;
int main()
{
struct node nod1;
struct node nod2;
struct node nod3;
nod1.element=87;
nod2.element=87;
nod3.element=98;
nod1.next=&nod2;
nod2.next=&nod3;
nod3.next=NULL;
list L;
L.next=&nod1;
printlist(L);
return 0;
}
void printlist(list l)
{
position p;
p=(l)-> next;
while(p!=NULL)
{
printf("%d",(p)-> element);
p=p->next;
}
}
我得到的错误是在这条语句中:
L.next=&nod1;
我不明白为什么,因为我已经在代码的开头定义了“list
”,并且类型“ptr
”也已经定义了:
typedef ptr list;
根据定义,你必须改变
L.next=&nod1;
至
L->next=&nod1;
因为在您的代码中,L
的类型为 struct node *
。
为避免混淆,请勿typedef
指点。有时,它们变得非常棘手。
接下来,正如@WhozCraig先生在下面的评论中指出的,一旦你解决了这个问题,你就分配L
(或任何指针,就此而言),然后再使用它。否则,使用未初始化的指针调用 undefined behaviour.
你必须这样做
L->next = (struct node *) &nod1;
您定义了一个新类型 ptr
,它是 struct node *
类型(指向 struct node
类型的指针)。之后,您将 list
定义为 ptr
类型。因此
list L;
会将 L
声明为指向 struct node
的 指针。由于 L
是指向结构的指针,因此您需要一个 ->
运算符来访问它指向的元素。首先为L
分配内存
L = malloc(sizeof(struct node));
然后是
L->next=&nod1;
我一直在使用链表进行训练,并且编写了以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *ptr;
struct node
{
int element;
ptr next;
};
typedef ptr list;
typedef ptr position;
int main()
{
struct node nod1;
struct node nod2;
struct node nod3;
nod1.element=87;
nod2.element=87;
nod3.element=98;
nod1.next=&nod2;
nod2.next=&nod3;
nod3.next=NULL;
list L;
L.next=&nod1;
printlist(L);
return 0;
}
void printlist(list l)
{
position p;
p=(l)-> next;
while(p!=NULL)
{
printf("%d",(p)-> element);
p=p->next;
}
}
我得到的错误是在这条语句中:
L.next=&nod1;
我不明白为什么,因为我已经在代码的开头定义了“list
”,并且类型“ptr
”也已经定义了:
typedef ptr list;
根据定义,你必须改变
L.next=&nod1;
至
L->next=&nod1;
因为在您的代码中,L
的类型为 struct node *
。
为避免混淆,请勿typedef
指点。有时,它们变得非常棘手。
接下来,正如@WhozCraig先生在下面的评论中指出的,一旦你解决了这个问题,你就分配L
(或任何指针,就此而言),然后再使用它。否则,使用未初始化的指针调用 undefined behaviour.
你必须这样做
L->next = (struct node *) &nod1;
您定义了一个新类型 ptr
,它是 struct node *
类型(指向 struct node
类型的指针)。之后,您将 list
定义为 ptr
类型。因此
list L;
会将 L
声明为指向 struct node
的 指针。由于 L
是指向结构的指针,因此您需要一个 ->
运算符来访问它指向的元素。首先为L
L = malloc(sizeof(struct node));
然后是
L->next=&nod1;