2012-03-22 1 views
0

내가 지금 가지고 이런 설정되어 한 것 :는 중첩 된 클래스가 정의 된 경우에도 중첩 클래스 -에서 부모 클래스를 사용할 수 없습니다 이후

template<typename T> class Parent { 
    struct Nested; 
    std::unique_ptr<Nested> ptr; 
public: 
    // stuff 
    ~Parent(); 
}; 
template<typename T> struct Parent<T>::Nested { 
    Parent<T> p; 
    // stuff 
}; 

비주얼 스튜디오 나에게 Nested 구조체는 그 오류를 제공합니다형식을 사용하고 있습니다. 인 경우 이후에 Parent 클래스가 완료되었습니다.

이 문제를 어떻게 해결할 수 있습니까?

편집 : 경우 그것은 분명하지 않았다, 나는 후 Nested 클래스는 불완전한 유형으로 unique_ptr 수 있도록 정의 때까지 지연 소멸자 정의를 사용했다. 또한 Nested이 불완전하지 않아서 NestedParent 멤버가 포함되어있어 불완전하지 않기 때문에 가장 관련이 없습니다. 또한 std::function<void(Nodes*)>을 사용하여 Deleter를 명시 적으로 지우면 문제가 해결되지 않습니다.

+0

이 코드는 MSVS2010에서 컴파일됩니다 (상단에'#include '을 추가 한 후) – Attila

+0

그것은 나를위한 것이 아닙니다. – Jagannath

+0

** 내 나쁜 ** ** 정확하게 ** 정확한 **로 ** 닫기 ** 투표를 ** 잘못 **있다. 투표를 닫지 마십시오. –

답변

1

문제는 unique_ptr이 아니며 클래스가 아닙니다. shared_ptr 또는 일반 원시 포인터로 변경하면 코드가 정상적으로 작동합니다.

다음 링크는 Stackoverflow에서 찾으십시오. 부모가 템플릿되지 않은 경우 위의 링크 당으로

Does std::unique_ptr requires to know the full T definition?

UPDATE
은, 코드 unique_ptr와 함께 작동합니다.

+0

'shared_ptr'과'unique_ptr'은 서로 다른 유형의 기능을 제공합니다. 만약 그들이 서로 무작위로 교체 될 수 있다면, 그들은 분리 된 형태로 존재하지 않을 것입니까? –

+0

예, 동의합니다. 그러나이 문제는 아직 전체 정의가없는 유형에 대해 unique_ptr을 사용하려는 경우에 발생합니다. – Jagannath

+0

:-) 그냥 말합니다. 이 질문을 한 사람이 내가 링크에서 제공 한 답을 얻기 위해 2 점을 챙겼다는 것은 아이러니하다. http://stackoverflow.com/a/6088400/124797 – Jagannath

관련 문제