看看许多其他类似的问题,它们似乎并不能解决在结构中调用结构的问题。
我有一个简单的queue.c文件,它有几个结构,如structNode、structQueue、structQueue*newQueue(int-cap(等
以下是文件job_queue.c:中与此问题相关的两个结构
...
struct Queue {
int size;
int max_size;
struct Node *head;
struct Node *tail;
};
struct Queue* newQueue(int capacity)
{
struct Queue *q;
q = malloc(sizeof(struct Queue));
if (q == NULL) {
return q;
}
q->size = 0;
q->max_size = capacity;
q->head = NULL;
q->tail = NULL;
return q;
}
...
这是我导入到主文件中的queue.h头文件。
#ifndef __SIMPLE_QUEUE__
#define __SIMPLE_QUEUE__
struct Queue;
extern struct Queue*
newQueue(int capacity);
extern int
enqueue(struct Queue *q, char* value);
extern void*
dequeue(struct Queue *q);
extern void
freeQueue(struct Queue *q);
#endif
在其他帖子的指导下,我清楚地定义了结构的名称。在我的主C文件中,我从以下初始化队列
struct Queue* job_queue = newQueue(queue_cap);
我将它传递给另一个带有参数的函数,如下所示:
void queueing(struct Queue* jobs_queue){
...
}
在这个函数中,我试图通过以下操作打印最大值:
printf("Queue size: %d", jobs_queue->max_size);
然而,我得到了错误:dereferencing pointer to incomplete type 'struct Queue'
我必须修复什么才能消除这个错误?
您的queue.h文件仅声明struct Queue
。它没有定义,所以queue.c以外的文件看不到定义。
您需要将结构的完整定义放在queue.h中,以便在其他文件中看到它。