![](/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.