我已经定义了一个具有两个参数的宏,如下所示:
#define DO_LIST_HEADER(Titem,MAX) typedef struct {\
int count;\
Titem array[MAX];\
} TOrderedList##Titem;\
\
void initialize_list##Titem(TOrderedList *list);\
int insert_item##Titem(TOrderedList *list, Titem item);\
int retrieve_ith##Titem(const TOrderedList *list, int i, Titem *item);\
int number_of_items##Titem(const TOrderedList *list);\
int list_empty##Titem(const TOrderedList *list);
这是在一个头文件中,当我尝试从另一个.c
文件中“调用”此宏时,包括其中的标题。
typedef Ttime Titem;
DO_LIST_HEADER(Ttime,10)
我收到一条错误消息incomplete type not allowed
。
为什么我会收到此类错误?
DO_LIST_HEADER
宏包含包含Ttime
作为参数的函数原型。
答案 0 :(得分:1)
函数声明中的类型名称也需要与##Titem
术语粘贴:
#define DO_LIST_HEADER(Titem,MAX) typedef struct {\
int count;\
Titem array[MAX];\
} TOrderedList##Titem;\
\
void initialize_list##Titem(TOrderedList##Titem *list);\
int insert_item##Titem(TOrderedList##Titem *list, Titem item);\
int retrieve_ith##Titem(const TOrderedList##Titem *list, int i, Titem *item);\
int number_of_items##Titem(const TOrderedList##Titem *list);\
int list_empty##Titem(const TOrderedList##Titem *list);