访问具有结构的共享指针
accessing a shared pointer with a structure
这是我的代码的结构,我试图在函数中进入leftChild。
struct Branch {
shared_ptr<Node> leftChild;
shared_ptr<Node> middleChild;
shared_ptr<Node> rightChild;
int leftMax;
int rightMax;
Branch(shared_ptr<Node> left, shared_ptr<Node> middle): leftChild(left), middleChild(middle) {};
};
我的函数接受这个
Tval find_helper(Tkey k, shared_ptr<Node>& node)
我首先在这里使用它
find_helper(key, root); //though I believe this is wrong
然后我像这样递归地再次使用它
find_helper(k, node->branch->rightChild); //also most likely wrong
我收到错误:"->"的基本操作数具有非指针类型"二三树::分支" find_helper(k, node->branch->rightChild(;
我在代码中做错了什么
编辑(节点代码(:
这是这样给我的
struct Node;
然后为此使用标记的联合:
struct Node {
enum {BRANCH_TAG, LEAF_TAG} tag;
union {
Branch branch;
Leaf leaf;
};
Node(shared_ptr<Node> inLeft, shared_ptr<Node> inMiddle) : tag(BRANCH_TAG), branch(Branch(inLeft, inMiddle)) {};
Node(Tkey k, Tval v) : tag(LEAF_TAG), leaf(Leaf(k, v)) {};
~Node() {
switch (tag) {
case BRANCH_TAG:
branch.~Branch();
break;
case LEAF_TAG:
leaf.~Leaf();
break;
}
}
};
您应该使用 . 运算符而不是 -> 运算符,因为函数接受引用,而不是指针。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 嵌套类、继承和C++中的共享指针
- 制作一对共享指针并推送一个向量
- 如何将共享指针用作函数参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何将元素插入到标准::地图的共享指针中?
- 共享指针生存期
- 初始化可变数据结构中的共享指针向量
- 阻止在返回时复制共享指针