您好,我对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();
答案 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