テンプレートの使用方法を学ぶために、独自のテンプレート キュー クラスを作成しようとしています。この種の質問が頻繁に寄せられることがわかりました。多くの回答を読みましたが、何が間違っているのかまだわかりません。
template <class type>
struct Node{
type data;
Node *next;
};
template <class type>
class LinkedListQueue{
public:
LinkedListQueue();
void push(type new_data);
void pop();
type front();
void print();
private:
Node<type> *head;
Node<type> *tail;
};
template <class type>
LinkedListQueue<type>::LinkedListQueue(){
this->head = NULL;
this->tail = NULL;
}
template <class type>
void LinkedListQueue<type>::push(type new_data){
Node<type> *newNode;
newNode->data = new_data;
newNode->next = NULL;
if(this->head == NULL){
this->head = newNode;
this->tail = newNode;
}else{
this->tail->next = newNode;
this->tail = newNode;
}
}
template <class type>
void LinkedListQueue<type>::pop(){
if(this->head != NULL){
this->head = this->head->next;
if(this->head == NULL){
this->tail == NULL;
}
}else{
cout << "Queue is Empty" << endl;
}
}
template <class type>
type LinkedListQueue<type>::front(){
return(this->head->data);
}
int main() {
LinkedListQueue<int> newQueue;
newQueue.push(5);
newQueue.push(4);
cout << newQueue.front() << endl;
newQueue.pop();
cout << newQueue.front() << endl;
}
問題がどこにあるかを判断するのに苦労しています。pop と最後の front 呼び出しをコメントアウトすると、最初の front() 呼び出しが正しく出力されます。ただし、ポップとフロントのコメントを外すと、すべてが壊れます。pop() をデバッグしようとすると、リストにノードが 1 つしかないように見えます。
どんな助けでも大歓迎です。