2016-02-28 190 views
0

我有這樣的結構:初始化一些空指針節點

struct Node{ 
    int key; 
    Node *parent; 
    Node *left; 
    Node *right; 
    Node(Node *p, Node *l, Node *r){ 
     parent = p; 
     left = l; 
     right = r; 
    } 
}; 

,然後我有以下的,其中currentNode*

current->left = new Node(current, new Node, new Node); 

,但我得到

error: no matching constructor for initialization of 'Node' 
current->left = new Node(current, new Node, new Node); 
            ^

有什麼問題? new Node不會返回指向未初始化的指針Node,它應該滿足構造函數的要求嗎?

+0

您定義了一個ctor,所以任何'Node'都應該根據定義與該ctor構建。你不能有一個未初始化的'節點',這是什麼意思。 –

+0

也許這會工作:'current-> left = new Node(current,null,null);'? – kostek

+0

在C++/c中不要使用new/malloc,因爲你必須刪除/釋放位於堆上的已分配內存。 – Tdorno

回答

2

由於您爲Node定義了構造函數,因此它沒有生成隱式默認構造函數。通過調用new Node而沒有任何參數,您正嘗試調用默認構造函數。

是不是new Node返回指向未初始化的指針Node

不會。它會構造一個新的Node並將指針返回給它。將nullptr作爲Node*的論點可能更有意義。

new Node(current, nullptr, nullptr); 
+0

那我該怎麼辦? –

+0

@RenéG定義您想要的構造函數或將正確的參數傳遞給您正在觸發的構造函數。 – WhozCraig

0

struct沒有一個構造函數,不帶任何參數,因此它不能與new Node創建。你可以創建一個不帶參數的構造函數,像Node() {},但是這些值不會被初始化。