【发布时间】:2026-01-12 03:55:01
【问题描述】:
所以我无法弄清楚以下问题: 我得到了 orderPtr 的未知类型,它是 struct Order 的 typedef,即使我已经包含了声明这种类型的头文件。 这是queue.h中的代码:
#ifndef QUEUE_H
#define QUEUE_H
#include <stdio.h>
#include "book.h"
#include "queue_node.h"
/*
* Queue structure for consumers threads
*/
typedef struct queue {
pthread_mutex_t mutex;
pthread_cond_t notempty;
struct queue_node *rear;
} queuePtr;
void queue_enqueue(queuePtr *, orderPtr *);
orderPtr *queue_dequeue(queuePtr *queue);
#endif
这里这个类型是在 book.h 中声明的:
#ifndef BOOK_H
#define BOOK_H
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <pthread.h>
#include "uthash.h"
#include "customer.h"
#include <errno.h>
#include <unistd.h>
#include "queue.h"
typedef struct order {
char *title;
double price;
char *idnum;
char *category;
} orderPtr;
void order_destroy(orderPtr *);
orderPtr * order_create(char *, double, char *, char *);
#endif
【问题讨论】:
-
你有一个循环引用,
book.h包括queue.h和queue.h包括book.h。我不太确定您希望编译器对此做什么:) -
@JoachimIsaksson 谢谢!我真的不知道
-
这部分结构定义:'} queuePtr;'不是生成指向结构类型的指针,而是生成结构类型。您可以将行更改为: '} *queuePtr; --或者-- 你可以调用函数: void order_destroy(orderPtr *);使用 order_destroy( &myOrder );其中 myOrder 是结构的实例
-
在链表中,指向链表中下一个条目的指针应该是与结构本身相同类型的结构,所以这一行: struct queue_node *rear;应该是:struct queue *rear;
标签: c