我想使用节点创建队列,因为它在创建时将是空的,因此我希望头和尾都指向NULL。但是当我尝试执行此操作时,标题出现错误。有任何想法吗?

 typedef struct node node_t;
 typedef struct queue queue_t;


 struct node{
        void *info;
        struct node *next;
 };

 struct queue{
        node_t *head;
        node_t *tail;
 };

queue_t* new_queue(void){
        queue_t* q = malloc(sizeof(queue_t));
        if (q == NULL)
                return NULL;
        q->tail = NULL;
        q->head = NULL;
        return q;
}


谢谢!

编辑:这是我尝试编译时遇到的错误:

(gcc queue.c -Wall -pedantic -std = c99 -g -o q)

unt.c:在“ new_queue”函数中:

unt.c:30:31:错误:将“ sizeof”无效地应用于不完整的类型“ queue_t”

queue_t * q = malloc(sizeof(queue_t));

                           ^


unt.c:33:6:错误:将指针解引用为不完整类型

q-> tail = NULL;
      ^

unt.c:34:6:错误:将指针解引用为不完整类型

q-> head = NULL;
      ^

unt.c:35:2:错误:预期的声明或输入末尾的语句

返回q;
  ^

最佳答案

对我来说,编译就可以了。尝试将typedef移至struct声明下方

 struct node{
    void *info;
    struct node *next;
  };

 struct queue{
    node_t *head;
    node_t *tail;
 };

 typedef struct node node_t;
 typedef struct queue queue_t;


除此之外,似乎还可以

编辑:
还应该检查一下stdlib和stdio include。

10-05 18:33