我现在所拥有的是这样的设置:
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 :(得分:1)
问题更多的是unique_ptr
,而不是类。将其更改为shared_ptr或普通原始指针,代码工作正常。
请从Stackoverflow找到以下链接。
Does std::unique_ptr requires to know the full T definition?
<强>更新强>
根据上面的链接,如果Parent没有模板化,代码将与unique_ptr
一起使用。