C:取消引用指向不完整类型的单向链表的指针



list.h

#ifndef LIST_H
#define LIST_H
/* Function prototypes */
struct nodeStruct* List_createNode(int item);
#endif

列表.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;
}

主:

#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,我已经尝试了几种组合来取消引用,但似乎不起作用。正确的方法是什么?

更新:

列表.h

#ifndef LIST_H
#define LIST_H
    struct nodeStruct {
    int item;
    struct nodeStruct *next;
};
/* Function prototypes */
struct nodeStruct* List_createNode(int item);
#endif

现在错误是,从我的 list.c 文件中invalid application of ‘sizeof’ to incomplete type ‘struct nodeStruct’ struct nodeStruct *node = malloc(sizeof(struct nodeStruct));

我可以想到几种方法:

  1. struct的定义放在头文件中,#include头文件放在main.c中。

  2. 添加几个函数

    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,因为它的定义尚未包含在本地文件中。

注意:这基于您在 list.h 中定义struct nodeStruct的更新。

相关内容

  • 没有找到相关文章