C不完整类型预定义数据结构

时间:2014-01-28 02:35:29

标签: c queue scheduler rounding

您好,我对C编程比较陌生。这是我的问题:

我正在尝试使用我的test.c中包含的头文件中的预定义通用队列结构。但是,当我尝试使用该结构和标头中定义的函数时,我得到与“不完整类型”相关的错误,我无法弄清楚编译器究竟没有“看到”。

这是我的标题:

#ifndef __GENERIC_QUEUE
#define __GENERIC_QUEUE

typedef struct gqueue GQueue;
typedef void *GQueueElement;

GQueue *create_gqueue (void); 
int destroy_gqueue(GQueue *gq);

这是.c文件:

#include <stdio.h>
#include <stdlib.h>
#include "generic_queue.h"
#include "TCB.h"

void main(){
    GQueue *qp;
    qp = malloc(sizeof(GQueue));
    qp = *create_gqueue();
    printf("created");

}

以下是编译时的结果:

$ gcc test1.c
test1.c: In function ‘main’:
test1.c:8:24: error: invalid application of ‘sizeof’ to incomplete type ‘GQueue’
  qp = malloc(sizeof(GQueue));
                    ^
test1.c:9:7: error: dereferencing pointer to incomplete type
  qp = *create_gqueue();

1 个答案:

答案 0 :(得分:0)

似乎问题是,虽然

typedef struct gqueue GQueue;

定义要使用的GQueue而不是struct gqueue,结构本身没有定义。也许你需要

#include "gqueue.h"

如果未包含结构的定义,则不能使用sizeof(GQueue),因为编译器不知道该大小。但是,只要您只使用导出的接口,程序仍然可以编译并运行GQueue是不透明的。看来你甚至不需要用malloc创建一个GQueue;你可以简单地调用create_gqueue。

qp = malloc(sizeof(GQueue));   // <---- not necessary
qp = create_gqueue();         // <---- all you need