成员函数从main函数更改对象,而不是从其他函数更改对象
Member functions change object from main but not from other function
我有一个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;
}
…然后在main中:
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) {
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数