"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
// 구현 내가 쓴 국지적 인 코드입니다.
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++의 queue stl을 사용하지 않는 이유는 무엇입니까? 왜 휠체어를 재발 명하고 있습니까? –
@Ahmed Samy 최소한 함수 void Queue :: Pop()이 잘못되었습니다. 예를 들어,이 Front = tmp; 삭제 tmp; 은 의미가 없습니다. –
질문에 오류 메시지를 추가 하시겠습니까? –