访问具有结构的共享指针

时间:2015-12-07 20:52:32

标签: c++

这是我试图在函数中进入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

我收到错误:' - &gt;'的基本操作数有非指针类型'TwoThreeTree :: Branch'                 find_helper(k,node-&gt; branch-&gt; 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;
            }
        }
    };

1 个答案:

答案 0 :(得分:0)

你应该使用。运营商不是 - &gt;运算符,因为你的函数接受引用,而不是指针。