c-为在结构中调用的结构取消引用指向不完整类型的指针



看看许多其他类似的问题,它们似乎并不能解决在结构中调用结构的问题。

我有一个简单的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中,以便在其他文件中看到它。

最新更新