2017-02-27 7 views
0

Figureから派生した異なる種類の数字のリストがあります。私は最後から来る特定のタイプの2つの要素を見つけたいと思う。リストの最後から最後の2つの要素を取得できません。C++、mfc

私は2つのイテレータを持っています。最初のものが要素を見つけると、2番目のイテレータは最初のイテレータの値を取得し、リストの先頭に向かって続きます。

2番目のイテレータのような継ぎ目は正しい値を見つけますが、デバッグではイテレータが正しい値を取得していることがわかりましたが、t2はオブジェクトに割り当てません。カントはそれを理解しています。

問題は、リストに2つの要素がある場合にのみ表示されます。ここで

コードです:あなたのコード例で

  std::list<Figure*>::iterator it = pDoc->selectedFigures.end(); 
      std::list<Figure*>::iterator it2; 

      if(it != pDoc->selectedFigures.begin()) 
      it--; 
      else return; 

      Point *t1 = new Point(); 
      Point *t2 = new Point(); 
      t1 = NULL; 
      t2 = NULL; 

      while(it != pDoc->selectedFigures.begin()){//finds the first point 

       if((**it).type() == 1){ 
        t1 = (Point*)(*it); 
        it2 = it; 
        break; 
       } 
       --it; 
      } 



      while(it2 != pDoc->selectedFigures.begin()){//finds the second point 

       if((**it2).type()==1 && (*it2) != t1){ 
        t2 = (Point*)(*it2); 
        break; 
       } 
       --it2; 
      } 

答えて

0

、問題はそのt1 == t2 (== NULL)です。したがって、第2ループの条件は、... && (*it2) != t1)に失敗し、t2は設定されません。

私は、私はあなたが(FIGURE_TYPE_Aのように)列挙型を使用することをお勧め、コメントしていなく、条件が満たされた1

+0

ようなタイプをハードコーディング、私はプログラムをデバッグし、それは 'T2 =(ポイントに着くんが*)(* it2); 'だから、それは問題ではないと思います。 't1 = t2 = NULL'は最初だけですが、最初のポイント' t1'が見つかった後は 'null'ではありません。 – wdc

+1

ああ、良い点。あなたの例では、新しいポイントをt1とt2に割り当ててから、そのメモリに(?)リークするので、私は混乱しました。 –

+1

デバッガで 't2 =(Point *)(* it2);'に達すると、t2が割り当てられます。 100%確実なprintfを追加してください。 テスト環境の外では、問題は2番目のループの追加条件になります。あなたのリストは 'Figure *'で構成されているので、リスト中の「タイプ1の2つのFigure」は同じアイテムへのポインタになります。 –

関連する問題