2017-03-09 4 views
0

헤더 파일에서 네임 스페이스 아래에 템플릿 함수가 정의되어 있습니다. 이 헤더를 같은 프로젝트의 두 소스 파일에 포함시킬 때. 나는 재정의 오류가 발생하지 않습니다.헤더 파일에 대한 재정의 오류 - cpp

/* template.h */ 
namespace x 
{ 
    template<typename T> 
    function(t) 
    { 
     /* implementation */ 
    } 
} 

/*test.cpp*/ 
#include "template.h" 

/* test2.cpp */ 
#inlcude "template.h" 

위의 경우에는 재정의 오류가 발생하지 않습니다. . 왜 오류가 발생하지 않습니까?

+1

헤더 파일에 * 함수 *를 정의하지 않았기 때문에 * 템플릿 * 함수를 정의했습니다. 예. [템플릿을 헤더 파일에만 구현할 수있는 이유는 무엇입니까?] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) 자세한 내용은 . –

+0

나는 이해하지 못한다 - 당신은 왜 당신이 오류를 얻지 못하고 있는지 묻고 있습니까? 또는 무엇을? 헤더 파일은 각 cpp 파일에 한 번 포함되었으므로 재정의 할 수 없습니다. 각 cpp는이 헤더를 한 번만 볼 수 있기 때문에 괜찮습니다. –

+0

template.h를 여러 소스 파일에 포함하면 어떻게됩니까? @Someprogrammerdude –

답변

2

암시 적 템플릿 인스턴스화는 암시 적으로 inline 인 것처럼 동작하기 때문에 모두 링크 타임에 하나의 인스턴스로 통합됩니다.

0

내부 헤더 파일에 내부 헤더 파일을 포함 시키면 모든 헤더가 포함되는 외부 파일에 헤더 잘 정의를 정의하십시오.

#ifndef FILE_H 
#define FILE_H 

/* ... Declarations etc here ... */ 

#endif 
관련 문제