2012-04-05 2 views
1

앞으로 선언해야하는 템플릿 클래스에서 파생 된 클래스를 전달하려고합니다.앞으로 선언 된 템플릿 기본 클래스에서 파생 된 클래스를 전달하려면 어떻게합니까?

다음
class TType { 
public: 
    TType() { } 
}; 

template<typename T> 
class Base { 
public: 
    Base() { } 
}; 

class Derived : public Base<TType> { 
public: 
    Derived() { } 
}; 

내가 필요에 실패 추측 : 여기

은 클래스의 예입니다

class TType; 
template<typename T> class Base; 
class Derived : public Base<TType>; // This fails 
Derived* pDerived; 

답변

5

그냥 앞으로 클래스 이름 선언

class Derived; 

을 선언에 클래스에 대한 더 이상의 정보를 포함 할 수 없습니다. 기본 클래스, 멤버 등은 클래스 정의에서만 선언 할 수 있습니다.

포인터 또는 참조 (예 : pDerived)를 선언하고 함수 또는 Derived을 인자 또는 반환 유형으로 선언하는 등 다양한 방법으로이 전방 선언을 사용할 수 있습니다. 클래스의 크기, 기본 클래스 또는 멤버를 알아야하는 모든 작업을 수행해야하는 경우에는 전체 정의가 필요합니다.

+0

당신은 당연히 맞습니다. 그러나 그것을 시도했을 때 실패했습니다. 여기에 실수가 있습니다. 앞으로 선언문에서'namespace {class Derived}; 그리고'class Derived;'를했습니다. 분명히 뭔가 네임 스페이스가 없다는 것을 말하기 위해'namespace'를 사용하는 것은'namespace'를 그냥 건너 뛰는 것과 같지 않습니다. 그래서 컴파일러가 모호하다고 말했습니다. – Solx

관련 문제