0

我定义了一个具有两个参数的宏,如下所示:

#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作为参数的函数原型。

4

1 回答 1

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);
于 2013-02-05T01:39:12.963 回答