2010-02-19 1 views
1

헤더에게템플릿 클래스 내가 lib 디렉토리로 구축이 세트가 제대로

class linkNode { 
    public: 
     linkNode(void *p) { 
      before = 0; 
      after = 0; 
      me = p; 
     } 

     linkNode *before; 
     void *me; 
     linkNode *after; 
    }; 

    template <class T> 
    class list 
    { 
    public: 
     list(void) { first = last = NULL; size = 0; } 
     ~list(void) { while(first) deleteNode(first); }  
    private: 
     void deleteNode(linkNode *l); 

     linkNode *first, *last; 
     unsigned int size; 
    }; 

.CPP

template <class T> 
inline void list<T>::deleteNode(linkNode *l) { 
    if(c->before) 
     if(c->after) { 
      c->before->after = c->after; 
      c->after->before = c->before; 
     } else 
      c->before->after = last = NULL; 
    else 
     if(c->after) 
      c->after = first = NULL; 
    delete c; size--; 
} 

을 구축하지 않으며 그것을 잘 구축합니다. 내가 시도 할 때 ePhys::list<int> myList; 내가 링커 오류를 얻을 수 없다는 말을 듣는다. ePhys::list<int>::deleteNode(class ePhys::linkNode *) 이것은 라이브러리를 사용하여 설정하는 데 문제가 아니며 다른 더미 클래스로 테스트를 거쳤습니다.

MSVC 2010 베타를 사용 중입니다.

제대로 링크 할 수있는 방법이 있습니까?

답변

4

C++은 템플릿의 별도 컴파일을 실제로 지원하지 않습니다. 템플릿 코드를 모두 헤더 파일에 넣어야합니다.

+0

템플릿 코드를 구성하는 일반적인 방법은 'foo.h'의 클래스 선언을 정상적으로 두는 것입니다. 'foo.hxx' (접미사는 프로젝트마다 다릅니다). 'foo.h'의 맨 아래 - 그래도 포함 가드 안에 - 구현은'#include "foo.hxx"지시어를 사용하여 포함됩니다. –

+0

@ gareth.stockwell 너무 자주 보았습니다. 그 이점은 무엇입니까? –

+0

@Neil Butterworth : 아이디어는 인터페이스와 구현을 분리하는 것입니다. 사용자로부터 구현 세부 사항을 숨기십시오. – Andy

관련 문제