2016-02-28 151 views
0

我有这样的结构:初始化一些空指针节点

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,它应该满足构造函数的要求吗?

+0

您定义了一个ctor,所以任何'Node'都应该根据定义与该ctor构建。你不能有一个未初始化的'节点',这是什么意思。 –

+0

也许这会工作:'current-> left = new Node(current,null,null);'? – kostek

+0

在C++/c中不要使用new/malloc,因为你必须删除/释放位于堆上的已分配内存。 – Tdorno

回答

2

由于您为Node定义了构造函数,因此它没有生成隐式默认构造函数。通过调用new Node而没有任何参数,您正尝试调用默认构造函数。

是不是new Node返回指向未初始化的指针Node

不会。它会构造一个新的Node并将指针返回给它。将nullptr作为Node*的论点可能更有意义。

new Node(current, nullptr, nullptr); 
+0

那我该怎么办? –

+0

@RenéG定义您想要的构造函数或将正确的参数传递给您正在触发的构造函数。 – WhozCraig

0

struct没有一个构造函数,不带任何参数,因此它不能与new Node创建。你可以创建一个不带参数的构造函数,像Node() {},但是这些值不会被初始化。