【发布时间】:2016-10-13 21:06:39
【问题描述】:
我有一个关于不完整类型和 unique_ptr 的快速问题。 我试图有一个简单的树状结构,这里已经简化了,我得到了一些关于不完整类型的编译器错误,我知道我必须定义生成的 dtor。虽然这并没有解决问题,但至少在我正在测试它的 msvc 中。
我不得不做的是,对于每个需要销毁不完整类型的类,我只需要在 .cpp 文件中包含相关的头文件。明确定义 dtor 并没有帮助,这让我感到惊讶。
Level1.h
#include "Level2Vector.h"
class Level1
{
public:
Level1() : lvl2_vec(this) {}
private:
Level2Vector lvl2_vec;
};
Level1.cpp
#include "Level2.h" // this was needed to not get the incomplete type
#include "Level3.h" // this was needed to not get the incomplete type
Level2.h
#include "Level3Vector.h"
class Level1;
class Level2
{
public:
Level2(Level1* const lvl1) : parent_(lvl1), lvl3_vec(this){}
private:
Level1* parent_;
Level3Vector lvl3_vec;
};
Level2.cpp
#include "Level2.h"
#include "Level3.h" // this was needed to not get the incomplete type
Level3.h
class Level2;
class Level3
{
public:
Level3(Level2* const lvl2) : parent_(lvl2) {}
private:
Level2* parent_;
};
Level2Vector.h
class Level1;
class Level2;
class Level2Vector : public std::vector<std::unique_ptr<Level2>>
{
public:
Level2Vector(Level1* lvl1) : parent_(lvl1) {}
private:
Level1* parent_;
};
Level3Vector.h
class Level2;
class Level3;
class Level3Vector : public std::vector<std::unique_ptr<Level3>>
{
public:
Level3Vector(Level2* lvl2) : parent_(lvl2) {}
//~Level3Vector();
private:
Level2* parent_;
};
我错过了什么吗? 是否每个可能使用 Level2Vector 的类都需要包含 Level2.h 标头?
【问题讨论】:
-
继承自
std::vector:-( -
我可以通过组合拥有自己的向量类,或者私下从向量继承。重点不在于它,所以我不想使问题复杂化。我知道公共继承和标准容器......与问题相关的任何内容?