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定义你想要的构造函数,或者将正确的参数传递给你正在激发的构造函数。