Двоечник Обыкновенный
Высший разум
(102292)
1 год назад
std::string *stack[50]; // создаем фиксированный диннамический массив, максимум на 50
Вот и ошибка.
Во-первых, std:: вообще не нужен, так как есть строка using namespace std;
Во-вторых, нужно либо так:
string stack[50];
либо так:
string * stack = new string[50];
По условию задачи массив доложен быть фиксированным и базоваться на указателях.
#include <iostream>
#include <string>
using namespace std;
struct Type{
std::string data;
};
class Astack{
std::string *stack[50]; // создаем фиксированный диннамический массив, максимум на 50 элементов
int n; // количество элементов в массиве
public:
Astack(int count); // конструктор, в который передаем количество элементов, для заполнения массива
Astack(const Astack &obj); // конструктор копирования
std::string pop(); // возвращает значение последнего элемента и "удаляет его"
void print();
int num(); //вернуть к-во элементов в стеке
bool isempty(); // проверка пуст ли массив
void push(const Type &r); // добавляем новое значение
};
Astack::Astack(int count)
{
n = count;
std::cout << "Please enter " << count << " values:\n";
std::string str;
for (int i=0; i<n; i++){
std::cout << i+1 << ". ";
std::cin >> str;
stack[i] = &str;
}
}
Astack::Astack(const Astack &obj)
{
n = obj.n;
for (int i=0; i<n; i++)
stack[i]=obj.stack[i];
}
//вывести на экран
void Astack::print() {
for (int i = n-1; i >= 0; --i)
cout << *(stack + i) << " ";
cout << endl;
}
int Astack::num(){
return n;
}
// если н == 0 -> массив пуст -> возвращаем 1
// если н != 0 - > массив не пуст -> возвращаем 0
bool Astack::isempty(){
return (n == 0);
}
std::string Astack::pop(){
--n; // "удаляем последний элемент"
return *stack[n];
}
void Astack::push(const Type &r){
std::string str = r.data ;
stack[n] = &str;
++n;
}
int main(){
// stack работает по принцыпу: последний пришел, первый вышел
// допустим вводим B E T
Astack obj1(3);
obj1.print(); // должно вывестись T E B
obj1.pop(); // т - пришел последний
obj1.print(); // выводим E B
Type d;
d.data = "Hi!";
obj1.push(d);
obj1.print();
}