2012-03-22 67 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 
}; 

的Visual Studio给我一个错误的Nested结构正在使用不完整的类型Parent - 即使之后的定义为Parent类已完成。

我该如何解决这个问题?

编辑:在情况下,它并不明显,我已经使用直到Nested类被定义为允许unique_ptr到一个不完整类型的延迟析构函数定义。此外,它绝对与此无关,因为错误不是Nested不完整 - 而是Nested包含Parent类型的成员,该成员不完整。另外,如果我通过使用std::function<void(Nodes*)>明确地删除删除器,则问题没有解决。

+0

此代码为MSVS2010编译(在顶部添加'#include '后) – Attila 2012-03-22 02:34:33

+0

它不适合我。 – Jagannath 2012-03-22 02:38:00

+0

**我的坏**我有**错误**投票关闭作为一个确切的副本,它是**不**。不要投票结束。 – 2012-03-22 03:25:39

回答

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'提供了不同类型的功能,如果它们可以随机替换,它们不会以单独的类型存在吗? – 2012-03-22 02:43:25

+0

是的,我同意。但是,如果您想将unique_ptr用于尚未具有完整定义的类型,则会出现此问题。 – Jagannath 2012-03-22 02:46:53

+0

:-)只是说。具有讽刺意味的是,提出这个问题的人为我在链接中提供的答案提了2分。 http://stackoverflow.com/a/6088400/124797 – Jagannath 2012-03-22 02:49:02