Frage

I have defined a macro having two parameter as given below:

#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);

This was in a header file and when I try to 'call' this macro from another .c file including the header in it.

typedef Ttime Titem;

DO_LIST_HEADER(Ttime,10)

Here I get an error that says incomplete type not allowed.

Why am I getting this type of error?

DO_LIST_HEADER macro contains function prototype containing Ttime as parameter.

War es hilfreich?

Lösung

The type names in the function declarations need to be pasted with the ##Titem term too:

#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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top