2012-03-05 23 views
1

すべてのコードはhereです。クラス自己参照問題

私はプロジェクトための複雑なツリーを作成しようとしているがしかし、これはプロジェクト(データ構造の構築)の始まりにすぎません。また、データ構造があなたが望むものになりうること、そして本当にこのようにしたいことを知ることが役立つと思います。あなたが別のものが良いと思うなら、それは壮大ですが、私はこのアイデアに従っていきたいと思っていますので、私のデータ構造を変更したくありません。

つまり、私はツリーを作成しています。

ツリーの各ノードにはコンテンツの文字列が含まれ、非終端記号の場合はbool(子供がある場合、またはリーフの場合)が含まれます。

さらに、各ノードにはベクトルへのポインタが含まれています(そのベクトルをvと呼ぶ)。

Vは他のベクターを含むようなものです。それらのベクトルXのうちの1つを呼び出しましょう。

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

+0

'this'は子供の住所ですか?それとも、それはノードのだろうか? –

+0

'children'はNode.cppの' addLeaves'によって生成されます(質問の先頭にあるpastebinを参照)。 –

答えて

2

thisポインタを試しましたか?子どもたちは[i] [j]は、あなたがデコンストラクタを書いているクラスのインスタンスへのポインタです

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

2

多分あなたは簡単に「この」で、あなたのオブジェクトを比較することができます。

+0

Nasserに感謝しますが、ニコはまずここに来ました!それは正しい答えですが、それは魅力のように機能します。 –