繁体   English   中英

如何将 class object 存储到二叉搜索树节点中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM