none
일반 클래스에서 템플릿 함수 사용시, 선언과 정의 RRS feed

  • 질문

  • .h 에 선언하고 

    .cpp에 정의를 해두었는데 링크 에러가 발생합니다. 

    .h에 선언과 정의를 모두 같이하면 에러가 발생하지 않는데 해결 방법 아시는분 있나요??

    ex> 

    .h

    class A{

    public:

      template <typename T> int Func(T _m);

    }

    .cpp 

    template <typename T> 

    int A:: int Func(T _m) {

        return int a;

    }

    위와 같이하면 링크 에러 

    아래와 같이 헤더에 같이 정의하면 노에러 

    .h

    class A{

    public:

      template <typename T> int Func(T _m);

    }

    template <typename T> 

    int A:: int Func(T _m) {

        return int a;

    }

    --------------------------------------------------------------------------------

    아시는분 있나요?? 

    2017년 6월 8일 목요일 오후 12:03

답변

  • 템플릿 클래스/함수는 선언 뿐만 아니라 정의도 반드시 헤더파일에 존재해야 합니다.

    템플릿이란 것은 말 그대로 틀에 불과한 것이고,

    작성한 템플릿 클래스/함수를 사용하는 코드가 존재하면 그 때에서야 비로소

    템플릿이라는 틀을 이용하여 구체화된 코드를 찍어내는 것이죠.

    그렇기 때문에 소스 파일에 넣지 않고 헤더 파일에 넣어야 합니다.

    2017년 6월 9일 금요일 오전 12:41