Я пытаюсь реализовать стеки с использованием конструкторов в C++. Я должен использовать внешнюю функцию для вставки элемента в стек, однако он не работает должным образом. Функция pushexternal, кажется, «вводит» функцию push, но не увеличивает значение ind, поэтому она не добавляет новый элемент в стек (например, в моем коде все pushxternals будут пытаться нажать значение на тот же самый индекс, последний из которых используется s.push - ind == 2). Я не уверен, что я делаю неправильно.Stack push using external function
О, я должен только модифицировать код класса - pushexternal и main должны оставаться неизменными.
#include <iostream>
using namespace std;
class Stack {
public:
int ind;
int * arr;
Stack()
{
arr = new int[25];
ind = -1;
}
~Stack()
{
delete [] arr;
}
void push(int val)
{
arr[++ind] = val;
cout << "Added " << arr[ind] << " to " << ind << endl;
}
void top()
{
cout << "Last: " << arr[ind];
}
};
void pushexternal(Stack s, int a) {
s.push(a);
}
int main() {
Stack s;
s.push(0);
s.push(1);
s.push(2);
pushexternal(s, 3);
pushexternal(s, 4);
pushexternal(s, 5);
return 0;
}
Результаты:
Added 0 to 0
Added 1 to 1
Added 2 to 2
Added 3 to 3
Added 4 to 3
Added 5 to 3
Top: 2
Благодарю вас, прохождение по ссылке работает правильно. Однако он требует от меня изменить функцию pushexternal (void pushexternal (Stack & s, int a)). В этой задаче книга, которую я использую, требует, чтобы я оставил pushexternal и основные функции неизменными и менял только код моего класса. Я не уверен, как я еще не пробовал, но использовал бы помощь с копировальным конструктором в этом случае? – drakerc
Конструктор копирования используется для инициализации объекта данными из уже существующего объекта. Это не поможет вам, так как ваша функция берет Stack из параметра функции и работает на нем. Я предполагаю, что пример неверен или книга хочет, чтобы вы нашли «ошибку». – Aleksandar