Вызвано исключение: нарушение доступа для чтения 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;
}