我在宏的幫助下製作了一個模板列表。當我在代碼中多次使用它時,我有一個錯誤。 MS VS中有一個鏈接錯誤LNC2005。 我想,它發生了,因爲函數體是在標題中,有沒有另一種方法來保持它們?如何在ANSI C中鏈接模板頭?
#define GENERIC_LIST_POSTFIX i
#define GENERIC_LIST_TYPE int
#define GENERIC_LIST_NAME list
#include "generic_list.h"
#undef GENERIC_LIST_POSTFIX
#undef GENERIC_LIST_TYPE
#undef GENERIC_LIST_NAME
如果我不能改變語言,你可以給我建議嗎? 謝謝。
有我的代碼
#ifndef _GENERIC_LIST_H
#define _GENERIC_LIST_H
#define _CAT(x,y) x##y
#define CAT(x,y) _CAT(x,y)
#if !defined GENERIC_LIST_POSTFIX
# error("GENERIC_LIST_POSTFIX")
#endif
#if !defined GENERIC_LIST_TYPE
# error("GENERIC_LIST_TYPE")
#endif
#if !defined GENERIC_LIST_NAME
# error("GENERIC_LIST_NAME")
#endif
//-------------------------------------------------------------------------------
typedef struct CAT(CAT(_list_,GENERIC_LIST_POSTFIX),_node) CAT(GENERIC_LIST_NAME,_node);
struct CAT(CAT(_list_,GENERIC_LIST_POSTFIX),_node)
{ GENERIC_LIST_TYPE value;
struct CAT(CAT(_list_,GENERIC_LIST_POSTFIX),_node) *prev;
struct CAT(CAT(_list_,GENERIC_LIST_POSTFIX),_node) *next;
};
//typedef struct CAT(_list_,GENERIC_LIST_POSTFIX) GENERIC_LIST_NAME;
struct CAT(_list_,GENERIC_LIST_POSTFIX)
{ unsigned int len; // number of elements
struct CAT(CAT(_list_,GENERIC_LIST_POSTFIX),_node) *first;
struct CAT(CAT(_list_,GENERIC_LIST_POSTFIX),_node) *last;
};
//-------------------------------------------------------------------------------
void CAT(CAT(list_,GENERIC_LIST_POSTFIX),_create)
(struct CAT(_list_,GENERIC_LIST_POSTFIX) *List);
{ List->len = 0; List->first = NULL; List->last = NULL; }
void CAT(CAT(list_,GENERIC_LIST_POSTFIX),_copy )
(struct CAT(_list_,GENERIC_LIST_POSTFIX) *scr, struct CAT(_list_,GENERIC_LIST_POSTFIX) *dest);
{ // ... }
// ... there are more code
#endif
所有的作品,但還有另一個問題。 我只能在一個.c文件中使用這個.h文件。 例如,如果我首先將GENERIC_LIST_TYPE定義爲int,則將其定義爲int *。
#define GENERIC_LIST_POSTFIX i
#define GENERIC_LIST_TYPE int
#define GENERIC_LIST_NAME list_i
#include "generic_list.h"
#undef GENERIC_LIST_POSTFIX
#undef GENERIC_LIST_TYPE
#undef GENERIC_LIST_NAME
#define GENERIC_LIST_POSTFIX pi
#define GENERIC_LIST_TYPE int*
#define GENERIC_LIST_NAME list_pi
#include "generic_list.h"
#undef GENERIC_LIST_POSTFIX
#undef GENERIC_LIST_TYPE
#undef GENERIC_LIST_NAME
我沒有得到2列表與list_i和list_pi名稱。 第二個「list_pi」是「未聲明的標識符」。 有沒有解決方案? 謝謝兩次。
如果沒有看到至少部分的頭部和確切的錯誤信息,那麼這將是不可能正確回答的。 – Mat 2012-02-28 12:50:59