C 宏';s";不允许使用不完整的类型“;错误?

C 宏';s";不允许使用不完整的类型“;错误?,c,visual-studio-macros,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 it

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

#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)
这里我得到一个错误,它说
不允许不完整的类型

为什么我会出现这种错误


DO_LIST_HEADER
宏包含函数原型,函数原型包含
Ttime
作为参数。

函数声明中的类型名称也需要粘贴
#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);

您是否在该语句之前的某个地方包含了
Ttime
的定义?正如您所看到的,Ttime是在头文件中定义的。@1011我们所看到的是
titime
是根据
Ttime
定义的,而不是
Ttime
本身的定义。不,我们看不到它的定义。我们把滴度定义为滴度。。不,不是<代码>TOrderedList##Titem在宏中定义。对
Ttime
进行替换,您将
torderedListtime
作为结构类型。您的参数没有使用它。你应该这样做,但在你的例子中你没有,因为你漏掉了
##Titem