C:取消引用指向不完整类型单链表的指针
C: dereferencing pointer to incomplete type singly linked list
list.h
#ifndef LIST_H
#define LIST_H
/* Function prototypes */
struct nodeStruct* List_createNode(int item);
#endif
list.c
#include <stdio.h>
#include <stdlib.h>
struct nodeStruct {
int item;
struct nodeStruct *next;
};
struct nodeStruct* List_createNode(int item) {
struct nodeStruct *node = malloc(sizeof(struct nodeStruct));
if (node == NULL) {return NULL;}
node->item = item;
node->next = NULL;
return node;
}
Main.c:
#include "list.h"
#include <assert.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct nodeStruct *one = List_createNode(1);
while(one != NULL) {
printf("%d", one->item); //error
one= one->next; //error
}
错误:error: dereferencing pointer to incomplete type printf("%d", one->item);
错误在 one->item
,我尝试了几种组合来取消引用,但似乎不起作用。什么是正确的方法?
已更新:
list.h
#ifndef LIST_H
#define LIST_H
struct nodeStruct {
int item;
struct nodeStruct *next;
};
/* Function prototypes */
struct nodeStruct* List_createNode(int item);
#endif
现在错误是,invalid application of ‘sizeof’ to incomplete type ‘struct nodeStruct’
struct nodeStruct *node = malloc(sizeof(struct nodeStruct));
来自我的 list.c 文件。
我可以想到几个方法:
将struct
的定义放在头文件中,#include
将头文件放在main.c
中。
添加几个函数
int getNodeItem(struct nodeStruct* node)
{
return node->item;
}
struct nodeStruct* getNextNode(struct nodeStruct* node)
{
return node->next;
}
并调用 main
中的函数。
while (one != NULL) {
printf("%d", getNodeItem(one));
one = getNextNode(one);
}
在list.c
中添加#include "list.h"
。当 gcc
尝试编译后者时,编译器的本地调用不知道 struct nodeStruct
因为它的定义尚未包含在本地文件中。
注意:这是基于您的更新,其中 struct nodeStruct
在 list.h
中定义。
list.h
#ifndef LIST_H
#define LIST_H
/* Function prototypes */
struct nodeStruct* List_createNode(int item);
#endif
list.c
#include <stdio.h>
#include <stdlib.h>
struct nodeStruct {
int item;
struct nodeStruct *next;
};
struct nodeStruct* List_createNode(int item) {
struct nodeStruct *node = malloc(sizeof(struct nodeStruct));
if (node == NULL) {return NULL;}
node->item = item;
node->next = NULL;
return node;
}
Main.c:
#include "list.h"
#include <assert.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct nodeStruct *one = List_createNode(1);
while(one != NULL) {
printf("%d", one->item); //error
one= one->next; //error
}
错误:error: dereferencing pointer to incomplete type printf("%d", one->item);
错误在 one->item
,我尝试了几种组合来取消引用,但似乎不起作用。什么是正确的方法?
已更新:
list.h
#ifndef LIST_H
#define LIST_H
struct nodeStruct {
int item;
struct nodeStruct *next;
};
/* Function prototypes */
struct nodeStruct* List_createNode(int item);
#endif
现在错误是,invalid application of ‘sizeof’ to incomplete type ‘struct nodeStruct’
struct nodeStruct *node = malloc(sizeof(struct nodeStruct));
来自我的 list.c 文件。
我可以想到几个方法:
将
struct
的定义放在头文件中,#include
将头文件放在main.c
中。添加几个函数
int getNodeItem(struct nodeStruct* node) { return node->item; } struct nodeStruct* getNextNode(struct nodeStruct* node) { return node->next; }
并调用
main
中的函数。while (one != NULL) { printf("%d", getNodeItem(one)); one = getNextNode(one); }
在list.c
中添加#include "list.h"
。当 gcc
尝试编译后者时,编译器的本地调用不知道 struct nodeStruct
因为它的定义尚未包含在本地文件中。
注意:这是基于您的更新,其中 struct nodeStruct
在 list.h
中定义。