매크로의 도움으로 템플릿 목록을 만들었습니다. 코드에서 한 번 이상 사용하면 오류가 발생합니다. 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
모든 작품이 있지만, 또 다른 문제가있다. 이 .h 파일은 한 .c 파일에서 한 번만 사용할 수 있습니다. 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
나는 list_i 및 list_pi 이름이있는 2 개의 목록을 얻지 못합니다. 두 번째 "list_pi"는 "선언되지 않은 식별자"입니다. 해결 방법이 있습니까? 두 번 감사드립니다.
void doSomething()
{
printf("doing something");
}
이 파일을 여러 번 포함 할 때 링크 오류가 발생합니다 : 나는 당신의 질문 권리를 읽는다면
그 헤더와 정확한 오류 메시지의 일부를 보지 않고도 정확하게 대답하는 것은 불가능할 것입니다. – Mat