|
초보자 님이 쓰신 글 :
: //헤더파일
:
: template <class T> class _Object
: {
: public:
: _Object();
: }
:
:
: class _ddd : public _Object<_ddd>
: {
: public:
: _ddd();
: }
:
:
:
: //소스파일
:
: template <class T> _Object<T>::_Object()
: {
: // 어쩌구 저쩌구
: }
:
: _ddd::_ddd() : _Object<_ddd>()
: {
: // ...
: }
:
:
:
:
: 위처럼 코딩하고 컴파일 하면
:
: Linker Error - Unresolved external '_Object<_ddd>::_Object<_ddd>()'
: referenced form c:\......
:
: 이 나옵니다.
:
: 문법상으론 틀린게 없는거 같은데.. 왜그런거죠??
:
: 그리고 그외의 상속받은 함수들을 쓸려고 하면 다 위의 링커 에러가 뜹니다..
:
: 왜그런지. 꼭 알려주세요...
템플릿(template)은 말 그대로 '틀'입니다.
템플릿 클래스는 클래스를 (붕어빵을 찍어내득) 찍어내는 틀일 뿐이지 클래스 자체가 아니죠.
그래서 'Object<_ddd>::_Object<_ddd>()'는 당연히 오브젝트 파일에 존재하지 않습니다.
템플릿을 사용한 코드는 별도의 '소스파일'이나 오브젝트(obj), 라이브러리(lib, dll)로 만들 수가 없고, 반드시 '헤더파일'에만 존재해야 합니다.
그러니까 그냥 헤더파일에 템플릿을 사용한 모든 코드를 다 넣으시면 됩니다.
즉, 템플릿 라이브러리는 항상 헤더파일 형태로만 존재합니다.
그러므로 컴파일 시간이 오래걸리는 단점이 있지요.
|