2011-03-17 4 views
1

템플릿 클래스에서 상속하는 데 어려움이 있습니다. 그 문제가 링커/상속/가상 함수 문제

class derived : public base<type_spec_1> { 
protected: 
    ... 
public: 
    ... 
    bool func1(type_spec_1);// function I wish to override; 
}; 

가 // cpp를, 나는 시도

경우

template<typename type> 
class base { 
protect: 
    ... 
public 
    ... 
    virtual bool func1(type var1); 
}; 

이 클래스는 템플릿하지만 템플릿 클래스에서 파생되지 // 모르는 :
는 다음과 같이 보이는 범위를 기능, 그것은 컴파일하지만, 링커는 나에게이 형식에 오류가 있습니다

bool derived::func1(type_spec_1 type){ return false; }; 

연결하지 않습니다 LNK2001 해결되지 않은 기호 기본 :: FUNC1 (type_spec_1를);
마찬가지로 보이지도 않습니다. "derived"==base"<type_type_1>"
어떻게하면 적절한 구문을 제공 할 수 있습니까?

답변

1

이렇게 할 필요가 없습니까?

template<typename type> 
class base { 
protect: 
    ... 
public 
    ... 
    // provide implementation to be overriden 
    virtual bool func1(type var1) { return (bool) 0; } 
}; 

class derived : public base<type_spec_1>derived이 유형 base<type_spec_1>에서 derved하고 있다고하지만, base<type_spec_1>의 유형 정의가 아직 완전히 구현되지 않습니다 때문에?

+0

고맙습니다. 그것은 트릭을했다. 나는 가상 함수가 당신에게 정의를주기 전까지 추상적이라고 가정했다. –

+1

@Jen : 가상 bool func1 (type var1) = 0을 쓰면됩니다. "순수 가상 메서드" – Philipp

+0

@jen - 좋은 생각을 찾으십시오. 예를 들어 답을 게시하지 않는 이유는 무엇입니까? –