2012-04-23 1 views
1

초 템플릿 질문 : 나는 템플릿 클래스가템플릿 순환 종속성의 문제가 무엇 n00b 오늘의

:

template <class T> 
class foo{ 
    private: 
    //... 
    T SubFoo; 
    //... 

}; 

가 나는 또한 myClass가라는 클래스가 있습니다. 나는 종류의 물건을 가지고 싶다 :

foo<myClass> myObject; 

을하지만, 여기에 문제가있어, 나는 myObject.SubFoo에서 myObject에 대한 포인터를 얻을 수 있도록하고 싶습니다. 즉, myClass 클래스의 멤버 중 하나가 템플릿 클래스 foo의 인스턴스가되어야합니다.

그래서 내가 할 수있는 :

class myClass{ 
    //... 
    foo<myClass>* point2myClass; 

} 

그러나,이 작동하지 않는 것 같습니다 때문에

./foo.h:103

: 오류 : 'foo는 :: SubFoo가'불완전 형

있다 myClass가를 정의 할 때

, 프로그램은 그것은 푸의 (고화질)과 F로 이동 라인

foo<myClass>* point2myClass; 

발견 INDS :

 T SubFoo; 

하지만 T는,이 경우 myClass가이 아직 정의되지 않은 (즉, 프로그램이 무엇을하고 있었는지입니다!) 그래서, T가 무엇인지 모르는 따라서 오류가 발생했습니다.

선언 순서를 바꾸면 "foo"가 정의되지 않으므로 실패합니다.

어떻게하면됩니까 ??

감사합니다.

+2

코드 예제가 정확합니까? 당신은 당신이 받고있는 오류를해서는 안되기 때문입니다. –

답변

1

다음 코드는 제대로 작동합니다. 코드가 다른 경우 어디에서 지정하십시오.

template < typename T > 
struct A 
{ 
    T x; 
}; 

struct X 
{ 
    A<X>* x; 
}; 

int main() 
{ 
    X a; 
} 
+0

예. 그거야. 그래서 그것은 작동해야합니다 ... 아마 다른 뭔가가있을 것입니다. 입력 해 주셔서 감사합니다. – elelias

+0

아마도 템플릿을 전혀 인스턴스화하지 않습니다. – jpalecek