2012-03-01 5 views
0

私が持っているキュークラス内に私のdequeue関数に問題があるようです。ポジションクラスの一部である私のdequeue関数は、リストにエンキューされた正しい値を返していません。デキュー機能が適切な値を出力しない

エンキューされた値は、位置オブジェクトで、2,1と-1ですが、そのオブジェクトをデキューすると2,506216と-1が得られます。 *posポンターをオブジェクトに割り当てると、デフォルト値が残っています; ptrの値が正しいかどうかを確認すると、エンキュー機能が正しく機能しているようです。

//position constructor 
front = back = &header; 

     struct Posnode 
     { 
      Position *pos; 
      Posnode *next;  
     }; 
    class Position 
    private: 
       Posnode *front,*back,header; 
void Position::dequeue(Position&p) 
{ 
    Posnode *ptr=front->next; 
    front->next = ptr->next; 
    p = *ptr->pos; 
    p.geta();//checking for values but am left with the default 

    if (back == ptr) 
    { 
     back = front; 
    } 
    delete ptr; 

} 
v 

oid Position::enqueue(Position n) //assigning Position object to end of queue 
    { 
     Posnode *ptr = new Posnode; 
     ptr-> pos = &n; 
     back->next = ptr; 
     back = ptr; 

     return; 
    } 

位置コピー、intial(5); copy = intial;

 if (copy.ismovelegal(posmoves, r)) 
     { 
      copy.makemove(posmoves, r); 


      if (intial.solved(copy)) 
      { 
       cin.get(); 
      } 
      else 
      { 
       p.enqueue(copy); 


      } 
     } 
     copy.free();//clearing object private memebers 
    } 
    intial.free(); 

    p.dequeue(o);//copy that was previous enqued is not enqued 
    o.geta(); 
+1

この宿題はありますか?はいの場合は、宿題タグ – SpeedBirdNine

+0

を使用してください。まだ問題を示している作業中の最小限のプログラムを投稿することができれば、エラーを見つけやすくなります。投稿したコードはコンパイルされず、削除した部分にエラーがある可能性があります。 –

+1

コードサンプルが実際にコンパイルされるように投稿を編集しますか? – hvd

答えて

0

デキューの実装を最初にチェックし、自分で試してみてください。その構文や意味上のエラーがコードを再現する最小限のコードを投稿している場合。

このリンクはお役に立ちます。 Deque Implementation