Функции-члены изменяют объект с основной, но не с другой функции

У меня есть класс Stack, который использует класс связанного списка list внутренне. В моей основной функции мои функции-члены push и pop успешно модифицируют данный стек. Я написал другую функцию, которая берет стек и выполняет некоторые операции с ним. Внутренне он использует push и pop. Странно то, что внутри этой функции видимость меняется, но после ее выполнения стек остается неизменным. Я приведу часть кода (я могу добавить больше при необходимости):

void run_stack_op(Stack stack, string token) {
int operand1 = stack.pop();
int operand2 = stack.pop();
intfunc f = fmap[token];
cout << operand1 << ", " << operand2 << ", " << f(operand2, operand1) << endl;
stack.push(f(operand2, operand1));
cout << "current stack (in run_stack_op): " << stack.to_string() << endl;
}

…тогда в основном:

s = Stack();
s.push(3); s.push(4);
run_stack_op(s, "-");
cout << "current stack (in main): " << s.to_string() << endl;
int val = s.pop();
cout << "should be -1: " << val << endl;

что приводит к:

4, 3, -1
current stack (in run_stack_op): -1
current stack (in main): 4 3
should be -1: 4

0

Решение

Попробуйте использовать ссылку вместо копирования объекта.
добавлять & после типа использовать ссылку.

void run_stack_op(Stack& stack, string token) {

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]