代码之家  ›  专栏  ›  技术社区  ›  Bluuu

取消引用C中不完整类型队列的指针

  •  0
  • Bluuu  · 技术社区  · 10 年前

    我想使用节点创建一个队列,因为它在创建时是空的,我希望头部和尾部指向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=空; ^

    unt.c:34:6:错误:取消引用指向不完整类型的指针

    q->head=空; ^

    unt.c:35:2:错误:输入末尾应为声明或语句

    返回q; ^

    1 回复  |  直到 10 年前
        1
  •  1
  •   antonpuz    10 年前

    对我来说,它编译得很好。尝试将typedef移到结构声明下面

     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 includes。