![](/img/trans.png)
[英]How to divide an object of class "Binary Search Tree" into two objects of class "Binary Search Tree"?
[英]How to store a class object into a binary search tree node?
我正在尝试为能够存储 class 对象的二叉搜索树创建一个节点。 这是我到目前为止所拥有的:
struct person
{
string name;
int age;
person(string, int);
};
struct node
{
person p;
node* left;
node* right;
};
当我尝试在 main 中声明一个节点时,例如:
int main(){
node* root1 = new node();
root1->p("bob", 25);
return 0;
}
我收到以下错误消息:调用隐式删除的“节点”和类型“人”的默认构造函数不提供调用运算符
有人可以指出我做错了什么吗? 我以为通过在main中使用参数构造object会自动调用人class的构造函数?
当您创建root1
时,将构造p
,并且您不能在现有 object 上调用构造函数,因此编译器认为您正在执行 function 调用。 相反,您可以这样做:
root1->p = person{"bob", 25};
另外,这一行:
node* root1 = new node();
不会编译,因为person
没有默认构造函数。
你可以这样称呼它:
node* root1 = new node{{"bob", 25}};
或者恢复person
的默认构造函数,使用:
person() = default;
Cigien 的答案是正确的,也是您收到该错误的原因。 这只是你可以做的让你的二叉搜索树更通用的事情。
如果你真的想要 go 比你可以看看模板类。 这些允许您指定程序的一般概念,而与最终成员将具有的类型无关。
这看起来像:
template<class t>
struct node
{
t data;
node* left;
node* right;
}
指针定义如下所示:
int main(){
node<person>* root1 = new node<person>();
return 0;
}
(这也是实现类似std::vector
的方式)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.