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

C++ 使用一些空指针初始化节点,c++,pointers,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; } }; 然后我有以下内容,current是一个节点*: current->left = new Node(current,

我有这个结构:

struct Node{
    int key;
    Node *parent;
    Node *left;
    Node *right;
    Node(Node *p, Node *l, Node *r){
        parent = p;
        left = l;
        right = r;
    }
};
然后我有以下内容,
current
是一个
节点*

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);
                                       ^

有什么问题吗?
新节点
是否返回指向未初始化的
节点
的指针,该节点应满足构造函数的要求?

由于您为
节点
定义了构造函数,因此它没有生成隐式默认构造函数。通过在没有任何参数的情况下调用
新节点
,可以尝试调用默认构造函数

新节点
是否返回指向未初始化的
节点的指针

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

new Node(current, nullptr, nullptr);

由于您为
节点
定义了构造函数,因此它没有生成隐式默认构造函数。通过在没有任何参数的情况下调用
新节点
,可以尝试调用默认构造函数

新节点
是否返回指向未初始化的
节点的指针

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

new Node(current, nullptr, nullptr);

您的
结构
没有不带参数的构造函数,因此无法使用
新节点
创建它。您可以创建一个不带参数的构造函数,类似于
Node(){}
,但不会初始化值

您的
struct
没有不带参数的构造函数,因此无法使用
新节点创建它。您可以创建一个不带参数的构造函数,类似于
Node(){}
,但不会初始化值

您定义了一个ctor,因此任何
节点
都应该根据定义使用该ctor构造。你不能有一个未初始化的
节点,这就是ctor的用途。也许这会起作用:
current->left=新节点(current,null,null)?在不需要时,避免在c++/c中使用new/malloc,因为您必须删除/释放位于堆上的已分配内存。@kostek是,但
null
应为
null
。另外,
nullptr
是首选。您定义了一个ctor,因此任何
节点
都应该根据定义使用该ctor构造。你不能有一个未初始化的
节点,这就是ctor的用途。也许这会起作用:
current->left=新节点(current,null,null)?在不需要时,避免在c++/c中使用new/malloc,因为您必须删除/释放位于堆上的已分配内存。@kostek是,但
null
应为
null
。另外,
nullptr
是首选。那么我应该怎么做呢?@RenéG定义你想要的构造函数,或者将正确的参数传递给你正在激发的构造函数。那么我应该怎么做呢?@RenéG定义你想要的构造函数,或者将正确的参数传递给你正在激发的构造函数。