如何用智能指针构造树结构?

How to construct a tree structure with smart pointer?

这是一个代码片段,我想得到一个智能树结构 pointer.But 我得到了 c3646('parent':未知覆盖说明符)和 c4430(缺少类型说明符 - 假定为 int) vs.Does 有谁知道这是怎么回事,我该如何解决>?

#include<memory>

class Obj {
    ObjPtr parent;
};
typedef std::shared_ptr<Obj> ObjPtr;

您的 Obj class 不知道 ObjPtr 是什么,因为您提供了 typedef after Obj。您需要将其放在 class 定义之上,并提供 Obj:

的前向声明
class Obj; // Forward declaration

typedef std::shared_ptr<Obj> ObjPtr; // Now ObjPtr knows about class Obj

class Obj {
    ObjPtr parent; // We can now use ObjPtr
};
class Obj{
    public:
    using ObjPtr = std::shared_ptr<Obj>;
    private:
    ObjPtr parent;
};

不需要那么多声明。

你根本不需要 typedef

class Obj{
    std::shared_ptr<Obj> parent;
};

但是一棵树只需要拥有父->子方向的指针。您可以在子 -> 父方向使用原始指针

struct Node {
    Node * parent;
    std::unique_ptr<Node> left, right;
};