簡體   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