使用一些空指针初始化节点

时间:2016-02-28 19:23:27

标签: c++ pointers

我有这个结构:

struct Node{
    int key;
    Node *parent;
    Node *left;
    Node *right;
    Node(Node *p, Node *l, Node *r){
        parent = p;
        left = l;
        right = r;
    }
};

然后我有以下内容,其中currentNode*

current->left = new Node(current, new Node, new Node);

但是我得到了

error: no matching constructor for initialization of 'Node'
 current->left = new Node(current, new Node, new Node);
                                       ^

有什么问题? new Node不返回指向未初始化Node的指针,它应该满足构造函数的要求吗?

2 个答案:

答案 0 :(得分:2)

由于您为Node定义了构造函数,因此它不会生成隐式默认构造函数。通过在没有任何参数的情况下调用new Node,您将尝试调用默认构造函数。

  

new Node不会返回指向未初始化Node的指针吗?

没有。它将构造一个新的Node并返回指向它的指针。将nullptr作为Node*参数传递可能更有意义。

new Node(current, nullptr, nullptr);

答案 1 :(得分:0)

您的struct没有不带参数的构造函数,因此无法使用new Node创建它。您可以创建一个不带参数的构造函数,例如Node() {},但这些值不会被初始化。