如何用智能指针构造树结构?
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;
};
这是一个代码片段,我想得到一个智能树结构 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;
};