2014-09-09 5 views
0

나는 인터페이스를 가지고 있으며, 템플릿 기반 클래스가이 인터페이스를 구현하도록 노력하고 있습니다. 문제를 설명하는 간단한 예는 다음과 같습니다C++ : 템플릿 클래스를 사용하여 추상 클래스 구현하기

error: templates may not be 'virtual' 
virtual void Concrete<T>::do_something(int a){ 

이 동작을 달성 할 수있는 방법이 있나요 :

class Base{ 

    virtual void do_something(int a) = 0; 
    virtual ~Base(); 

}; 

template<typename T> 
class Concrete : Base{ 

    T _t; 
    Concrete(T t):_t(t){}; 
    virtual void do_something(int a); 
}; 

template<typename T> 
virtual void Concrete<T>::do_something(int a){ 
    std::cout << a << std::endl; 
} 

int main(int argc, char **argv) { 

    Concrete<int> c; 
    c.do_something(5); 
} 

그러나 컴파일러는 불평?

+4

함수 정의에서 virtual 키워드를 제거하십시오. 그것은이 수업 내에서 선언문을 작성하기에 충분합니다. –

답변

4

예, n.m. 고 밝혔다.

so.cpp:19:1: error: 'virtual' can only be specified inside the class definition 
virtual void Concrete<T>::do_something(int a){ 
^~~~~~~~ 

가상 키워드를 제거합니다 (클래스 정의 내부를 쓰기를 충분히/유일한 올바른 방법입니다) : 연타의 오류 메시지가 여기에 좀 더 도움이됩니다.

코드에 몇 가지 다른 문제가 있습니다 (~Base()이 정의되어 있지 않습니다. Concrete()에 매개 변수가 필요합니다). 그러나 질문하는 문제는 단순히 virtual 오류를 삭제하면 해결됩니다.

관련 문제