gpt4 book ai didi

c++ - 成员函数从 main 更改对象而不是从其他函数更改对象

转载 作者:行者123 更新时间:2023-11-28 06:03:49 24 4
gpt4 key购买 nike

我有一个 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

最佳答案

尝试使用引用而不是复制对象。
在要引用的类型后添加&

void run_stack_op(Stack& stack, string token) {

关于c++ - 成员函数从 main 更改对象而不是从其他函数更改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com