2011-03-29 5 views

답변

5

이 멤버 함수를 선언 :

#include <iostream> 

    class base { 
     public: 
     virtual void func() = 0; 
    }; 

    template<typename T> 
    class der : public base{ 
    }; 

    template<typename T> 
    void der<T>::func() 
    { 
     std::cout<<"In Der"; 
    } 

다음 오류가납니다. 명시 적으로 선언하고 다음을 정의해야 -

template<typename T> 
    class der : public base{ 
    public: 
     void func(); 
    }; 

당신이 또는 파생 클래스에서 재정의 할 수 없습니다 수 있습니다 멤버 함수에는 자동 선언은 없습니다. 파생 클래스가 템플릿으로 구현되는지 여부는 중요하지 않습니다.

2

파생 클래스 정의에서 가상 재 지정을 선언해야합니다.

template <typename T> 
class der : public base { 
public: 
    virtual void func(); 
}; 
1

이 작동합니다 :

#include <iostream> 

class base { 
    public: 
    virtual void func() = 0; 
}; 

template<typename T> 
class der : public base{ 
    public: 
    void func() 
    { 
     std::cout<<"In Der"; 
    } 
}; 

이 가능한 경우 전문화를 제외하고, 똑바로 템플릿에 함수 정의를 삭제하는 나에게 권장하고있다.

편집 : - 이유는 무엇입니까 '인라인'여기 단어

+0

인라인 최선의 선택이 아니었다? –

+0

흠, 나는 더 이상 정직하지 않습니다. 일부 참고 문헌을 통해 탐색하면 어디에서나 명확하게 설명 할 수 있습니다. 나는 당신이 컴파일러에서 '내보내기'를하지 않으면 동일한 머리말에 있어야한다는 아이디어가 있었다고 생각합니다. 템플릿을 피하면 더 짧은 코드를 얻을 수 있습니다. <...> 등등. –

관련 문제