Есть класс Person с некоторыми полями и методами.Имеется собственный стек, заполненный экземплярами класса Person. При попытке вывести данный стек происходит ошибка. Не могу понять, что нужно изменить - вопрос №3273314

#include «pch.h»
#ifndef STACK_H
#define STACK_H
#include <cassert>
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
template <typename T>
class Stack
{
private:
T *stackPtr;
const int size;
int top;
public:
Stack(int = 2);
Stack(const Stack<T> &); // конструктор копирования
~Stack();

inline void push(const T &); // поместить элемент в вершину стека
inline T pop(); // удалить элемент из вершины стека и вернуть его
inline void printStack(); // вывод стека на экран
inline const T &Peek(int) const; // n-й элемент от вершины стека
inline int getStackSize() const; // получить размер стека
inline T *getPtr() const; // получить указатель на стек
inline int getTop() const; // получить номер текущего элемента в стеке
};
template <typename T>
Stack<T>::Stack(int maxSize) :
size(maxSize)
{
stackPtr = new T[size];
top = 0;
}

template <typename T>
Stack<T>::Stack(const Stack<T> & otherStack) :
size(otherStack.getStackSize())
{
stackPtr = new T[size];
top = otherStack.getTop();

for (int ix = 0; ix < top; ix++)
stackPtr[ix] = otherStack.getPtr()[ix];
}

// функция деструктора Стека
template <typename T>
Stack<T>::~Stack()
{
delete[] stackPtr; // удаляем стек
}

// функция добавления элемента в стек
template <typename T>
inline void Stack<T>::push(const T &value)
{
assert(top < size);
stackPtr[top++] = value;
}
template <typename T>
inline T Stack<T>::pop()
{
assert(top > 0);
stackPtr[--top];
}
template <class T>
inline const T &Stack<T>::Peek(int nom) const
{
assert(nom <= top);
return stackPtr[top — nom]; // вернуть n-й элемент стека
}
template <typename T>
inline void Stack<T>::printStack()
{
for (int ix = top — 1; ix >= 0; ix--)
cout << "|" << setw(4) << stackPtr[ix] << endl;
}
template <typename T>
inline int Stack<T>::getStackSize() const
{
return size;
}
template <typename T>
inline T *Stack<T>::getPtr() const
{
return stackPtr;
}
template <typename T>
inline int Stack<T>::getTop() const
{
return top;
}
#endif // STACK_H
class Person
{
char pol[32];
char name[32];
char surname[32];
int age;
public:
void fillData();
void showData();
};
int main(int argc, char** argv)
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
Stack <Person> stack;
Person FirstChild;
Person SecondChild;
cout << «Внесите данные!\n»;
FirstChild.fillData();
SecondChild.fillData();
stack.push(FirstChild);
stack.push(SecondChild);
stack.printStack();
return 0;
}
void Person::fillData()
{
cout << «Пол: »;
cin.getline(pol, 32);
cout << «Имя: »;
cin.getline(name, 32);
cout << «Фамилия: »;
cin.getline(surname, 32);
cout << «Возраст: »;
cin >> age;
cin.get();
}
02.05.19
1 ответ

Ответы

А ошибка какая выдаётся? Процитируйте, пожалуйста, сам текст ошибки, или даже скриншот
02.05.19
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store