Вызвано исключение: нарушение доступа для чтения temp было (адрес)

Стек на основе односявязного списка,нужно организовать функции push(),pop() и print()

#pragma once
#include<iostream>
using namespace std;

template<class INF, class FRIEND>
class ListNode // узел(элемент)
{
private:
    INF d; //данные
    ListNode * next; //указатель на след элемент односвязного списка
    ListNode(void) //реализация конструктора
    {
        d = 0;
        next = nullptr;
    }
    ~ListNode()//деструктор
    {

    }  
    friend FRIEND;
};

template<class INF>
class Stack
{
    typedef class ListNode < INF, Stack <INF> > Node;//класс Stack это дружественный класс к кдассу ListNode. Node это новое имя(для удобства)
    Node *top;// указатель на вершину стека
public:
    void push(INF obj); // прототипы функции добавления элемента в стек
    void print(); //прототип функции печати
    void pop();
};

template<class INF>
void Stack<INF>::push(INF obj)
{

    Node *temp = new Node;
    temp->d = obj;
    if (top == nullptr)// проверка есть ли в стеке элемент
        temp->next = nullptr;
    else
        temp->next = top;
    top = temp;
}

template<class INF>
void Stack<INF>::pop()
{
    Node *temp = top;// временный объект который хранит первый элемент

    top = top->next;// хранит адрес след элемента после первого(после top)

    delete temp;// удаляем бывший первый элемент
}

template<class INF>
void Stack<INF>::print()
{
    cout << "Содержимое стека: ";
    Node * temp = top;

    while (temp != nullptr)
    {
        cout << temp->d << ' '; 
        temp = temp->next; // Очень важно - навигация по списку 
    }
    cout << endl;
}

Ответы (0 шт):