Ошибка макроса "не полный тип не разрешен"?
Я определил макрос, имеющий два параметра, как указано ниже:
#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 ответ
Решение
Имена типов в объявлениях функций должны быть вставлены с ##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);