访问具有结构的共享指针

accessing a shared pointer with a structure

本文关键字:共享 指针 结构 访问      更新时间:2023-10-16

这是我的代码的结构,我试图在函数中进入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;
            }
        }
    };

您应该使用 . 运算符而不是 -> 运算符,因为函数接受引用,而不是指针。