如何将类对象存储到二叉搜索树节点中?

sub*_*ads 4 c++ c++11

我正在尝试为能够存储类对象的二叉搜索树创建一个节点。这是我到目前为止:

struct person
{
string name;
int age;
person(string, int);
};

struct node 
{
person p;
node* left;
node* right;
};
Run Code Online (Sandbox Code Playgroud)

当我尝试在 main 中声明一个节点时,例如:

int main(){

node* root1 = new node();
root1->p("bob", 25);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:调用隐式删除的“节点”和类型“人”的默认构造函数不提供调用运算符

有人可以指出我做错了什么吗?我以为通过在main中构造带参数的对象会自动调用person类的构造函数?

cig*_*ien 5

当您创建root1,p被构造时,您不能在现有对象上调用构造函数,因此编译器认为您正在执行函数调用。相反,你可以这样做:

root1->p = person{"bob", 25};
Run Code Online (Sandbox Code Playgroud)

此外,这一行:

node* root1 = new node();
Run Code Online (Sandbox Code Playgroud)

不会编译,因为没有默认构造函数person

你可以这样称呼它:

node* root1 = new node{{"bob", 25}};
Run Code Online (Sandbox Code Playgroud)

或者恢复 , 的默认构造函数person

person() = default;
Run Code Online (Sandbox Code Playgroud)