-1
我在3个文件“Source.cpp,Queue.h,Queue.cpp”中编写了代码。在我的代码中找不到链接列表队列中的错误
每次运行程序时,都会显示错误,我不知道原因。包括所有需要的库。
//Source.Cpp “主要功能”
Queue<int>X;
//trying to run the program .
for (int i = 0; i < 5; i++)
{
X.Push(i + 1);
cout << X.Size() << endl;
}
X.front();/
X.Pop();
X.front();
X.Pop();
return 0;
//Queue.h
//节点类.header在它所有的功能文件。
template<class Mine>
class Node
{
public:
Mine Value;
Node<Mine> *Prev;
Node();
Node(Mine);
};
template<class Mine>
//Queue Class
class Queue
{
int Elements;
Node<Mine> *Front, *Back;
public:
Queue();
~Queue();
int Size();//returns Queue Size
void Push(Mine);//Push a new value to the back
void Pop();//removes a value from the front
void Clear();// delete all the elements
bool isEmpty();// checks if there are no elements in the queue
Mine front();//returns the value in the front
};
//Queue.cpp
//实施.the代码,我写的。
template<class Mine>
Node<Mine>::Node()
{
Value = 0;
Prev = 0;
}
template<class Mine>
Node<Mine>::Node(Mine Value)
{
this->Value = Value;
Prev = 0;
}
template<class Mine>
Queue<Mine>::Queue()
{
Elements = 0;
Front = Back = 0;
}
template<class Mine>
Queue<Mine>::~Queue()
{
Clear();
}
template<class Mine>
int Queue<Mine>::Size()
{
return Elements;
}
template<class Mine>
void Queue<Mine>::Push(Mine Value)
{
Node<Mine> *NEW = new Node<Mine>(Value);
if (Front==0)
{
Front = Back = NEW;
Back->Prev = 0;
}
else
{
Back->Prev=NEW;
Back = NEW;
Back->Prev = 0;
}
Elements++;
}
template<class Mine>
void Queue<Mine>::Pop()
{
Node<T>*tmp;
assert(!isEmpty());
tmp = Front->Prev;
delete Front;
Front = tmp;
delete tmp;
if (Elements==1)Front=Back;
Elements--;
}
template<class Mine>
void Queue<Mine>::Clear()
{
for (int i = 0; i < Elements; i++)
{
Pop();
}
}
template<class Mine>
bool Queue<Mine>::isEmpty()
{
return Elements == 0;
}
template<class Mine>
Mine Queue<Mine>::front()
{
assert(!isEmpty());
return Front->Value;
}
每次我尝试运行它停止工作的程序。
为什么不使用C++的队列stl,为什么你要重新发明wheel dude? –
@Ahmed Samy至少函数void Queue :: Pop()是错误的。例如,这个Front = tmp; 删除tmp; 没有意义。 –
您能否将错误消息添加到您的问题? –