不完全な型とunique_ptrに関する質問があります。 ここで単純化された単純なツリー構造をしようとしていましたが、不完全な型に関するコンパイラエラーがいくつか出ていました。私が知っていたのは、作成するdtorを定義する必要があるということでした。それは問題を解決しませんでしたが、少なくとも私はそれをテストしているmsvcで。不完全な型のツリー構造とunique_ptr
私が代わりにしなければならなかったのは、不完全な型の破壊を必要とするすべてのクラスに対して、関連するヘッダーを.cppファイルに含めるだけで済むということでした。明示的に定義することは助けにはならなかったが、それは私には驚きだった。
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ヘッダーを含める必要があると思われるクラスがありますか?
[mcve]と記入してください。 – user2079303
'std :: vector'からの継承:-( – Jarod42
私は独自のベクタークラスを作曲したり、私的にベクターから継承したりすることができましたが、それは問題ではなかったので、私は質問を複雑にしたくありませんでした。そして標準的なコンテナ...何か質問に関連していますか? – xerion