Ошибка макроса "не полный тип не разрешен"?

Я определил макрос, имеющий два параметра, как указано ниже:

#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);
Другие вопросы по тегам