不能在嵌套类中使用父类 - 即使之后定义了嵌套类

时间:2012-03-22 02:25:33

标签: c++ visual-studio-2010

我现在所拥有的是这样的设置:

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*)>明确删除删除器,则问题无法解决。

1 个答案:

答案 0 :(得分:1)

问题更多的是unique_ptr,而不是类。将其更改为shared_ptr或普通原始指针,代码工作正常。

请从Stackoverflow找到以下链接。

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

<强>更新
根据上面的链接,如果Parent没有模板化,代码将与unique_ptr一起使用。