我有这个结构:
struct Node{
int key;
Node *parent;
Node *left;
Node *right;
Node(Node *p, Node *l, Node *r){
parent = p;
left = l;
right = r;
}
};
然后我有以下内容,其中current
是Node*
:
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 :(得分:2)
由于您为Node
定义了构造函数,因此它不会生成隐式默认构造函数。通过在没有任何参数的情况下调用new Node
,您将尝试调用默认构造函数。
new Node
不会返回指向未初始化Node
的指针吗?
没有。它将构造一个新的Node
并返回指向它的指针。将nullptr
作为Node*
参数传递可能更有意义。
new Node(current, nullptr, nullptr);
答案 1 :(得分:0)
您的struct
没有不带参数的构造函数,因此无法使用new Node
创建它。您可以创建一个不带参数的构造函数,例如Node() {}
,但这些值不会被初始化。