2012-03-05 103 views
1

我的代碼全部可以找到here類自參考問題

我試圖創建一個複雜的樹狀一個項目然而,這是該項目(數據結構的建設)的僅僅是個開始。另外,我認爲這將有助於瞭解數據結構可以是任何你想要的,而且我真的想這樣做。如果你認爲另一個更好,那很隆重,但是如果我不需要,我不想改變我的數據結構,因爲我想遵循這個想法。

這就是說,我正在創建一棵樹。

樹的每個節點都包含一個內容字符串,如果它是非終端(如果它有子節點或者它是葉節點),則爲bool。另外,每個節點都包含一個指向vector的指針(讓我們稱之爲vector v)。

V是這樣的,它包含其他向量。讓我們調用其中一個向量X.

X包含一個指向節點的指針。

除了當X包含一個指向包含V的節點的指針時(如果有意義的話),代碼工作正常。當X包含一個指向包含V的節點的指針時,我得到一個終止於seg故障的無限循環。

我已經哈希這一點了一個小時,我敢肯定問題出在我的解構,它看起來像這樣:

Node :: ~Node() { 
    for (int i = 0; i < (*children).size(); i++) { 
     for (int j = 0; j < (*children)[i].size(); j++) { 
      if ((*children)[i][j] != selfP) { 
       delete (*children)[i][j]; 
      } 
     } 
    } 
} 

我想要做的是這樣的:

for (int i = 0; i < (*children).size(); i++) { 
    for (int j = 0; j < (*children)[i].size(); j++) { 
     if ((*children)[i][j] != CURRENT_NODE_ADDRESS) { 
      delete (*children)[i][j]; 
     } 
    } 
} 

但我不明白如何引用我目前定義的類的地址。有什麼想法嗎?

+3

您是否試過[this](http://en.wikipedia.org/wiki/This_(computer_programming))(鏈接)指針? – smhx 2012-03-05 18:09:00

+0

這不是'孩子的地址嗎?或者它會是節點? – 2012-03-05 18:11:42

+0

'children'通過Node.cpp中的'addLeaves'填充(請參閱問題頂部的pastebin)。 – 2012-03-05 18:12:12

回答

2

也許你可以很容易地用「這個」比較你的對象:

if (children[i][j] == this) 
{ 
... 
} 

,讓孩子[i] [j]是一個指向你正在寫的析構函數類的一個實例。

+0

感謝Nasser,但是nicko先到這裏!這是正確的答案,但它起到了魅力的作用。 – 2012-03-05 18:30:08