我的队列类中的dequeue
函数似乎有问题。我的dequeue
函数是position类的一部分,它没有返回已排入列表的正确值。
已经入队的值是哪个是位置对象,分别是2,1和-1,但当我将该对象出队时,我得到2506216和-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;
}
位置副本,原件(5);copy=初始;
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();
只需先查看Deque的实现,然后尝试自己的实现。如果它有一些语法或语义错误,则发布复制代码的最小代码。
这个链接可能会对你有所帮助。Deque实现