0

以下に示すように、2つのパラメーターを持つマクロを定義しました。

#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れています。

4

1 に答える 1

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);
于 2013-02-05T01:39:12.963 に答える