2012-01-25 2 views
0

가능한 중복 :
Why can templates only be implemented in the header file?는 방법 클래스 템플릿을 인스턴스화 및 전화

내가에서 MyClass.h을 포함 할 때 :

MyClass<int, int> ccc = MyClass<int, int>(); 
ccc.myMethod1(3, 4); 

나는 많이 얻을 생성자와 메서드에 대한 정의되지 않은 참조를 말하는 오류 ... 그러나 MyClass.cpp를 포함하면 (적절한 코드 작성 이유) 오류가 없습니다! 그것을 고치는 방법?

내가

+1

참조 (HTTP : // 유래. com/q/495021/20984). –

+0

어쩌면 1 행을 의도했는지 ** ** MyClass ccc; ** – CapelliC

+0

@chac ** 차이점은 ** MyClass ccc; **와 ** MyClass ccc = MyClass (); ** 사이에 차이가 있습니까? ** 벡터 v; ** 및 ** 벡터 v = 벡터 (**)과 같은 ** 생각입니다. – shn

답변

2

이유 ++ g을 사용하여 코드 :: 블록에서 컴파일하고있어 템플릿 클래스가 컴파일되지 않습니다 만 인스턴스화 템플릿이 컴파일 될 것이다.

규칙 : cpp 파일에 템플릿 구현을 배치하지 말고 헤더에서 직접 또는 인터페이스에서 구현을 나누고 싶은 다른 파일에 템플릿 구현을 배치하지 마십시오.

예 : [왜 템플릿은 헤더 파일에서 구현 될 수있다]

에서 MyClass.h

template<typename A> 
class MyClass 
{ 
    ... 
}; 

#include "myclass.inc" 

myclass.inc

//implementation goes here: 
.... 
관련 문제