宏的“不完整类型不允许”错误?

时间:2013-02-05 01:19:49

标签: c visual-studio-macros

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

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

1 个答案:

答案 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);