2012-03-01 66 views
0

在我擁有的隊列類中,我的dequeue函數似乎存在問題。作爲位置類的一部分的我的dequeue函數未返回已排入列表的正確值。出隊功能不輸出正確的值

已排隊的值是位置對象,是2,1和-1,但是當我出隊該對象時,我得到2,506216和-1;當我將*pos ponter分配給一個對象時,我剩下了默認值;當我檢查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 2012-03-01 07:10:30

+0

如果您可以發佈仍然存在問題的最小工作程序,將會更容易找到錯誤。您發佈的代碼無法編譯,並且錯誤可能在您刪除的部分中。 – 2012-03-01 07:10:47

+1

你會編輯你的文章,以便你的代碼示例是真正編譯的東西嗎? – hvd 2012-03-01 07:10:51

回答

0

只需先查看Deque的實現,然後嘗試自己的。如果它的一些語法或語義錯誤發佈了代碼的最小代碼。

此鏈接可能會幫助你。 Deque Implementation