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