我想实现一个堆栈然后用它来解决问题。我定义了一个 这样命名为Stack的类:
template<typename T>
class Stack
{ ... }
在这个课程中,我有基本的堆栈功能。在main中我创建了一个Stack对象:
Stack<tuple<string, int, int, int, int> > S;
在main内部,以下代码可以工作(它打印出来):
S.Push_back(make_tuple("cabs", 1, 2, 3, 4));
cout<<get<0>(S.Top())<<" ";
read_command(S);
正如你所看到的,在main中我调用了另一个名为read_command的函数,我想使用我创建的堆栈作为参数。这是使用我的堆栈的一部分:
void read_command(Stack<tuple<string, int, int, int, int> > S)
{
...
S.Push_back(make_tuple("abc", 1, 2, 3, 4));
cout<<get<0>(S.Top());
S.Pop_back();
}
最后,这就是我将我的函数声明为main的原因:
void read_command(Stack<tuple<string, int, int, int, int> >);
当我运行此程序时,它返回以下错误:
std::_Head_base<0u, std::string, false>::~_Head_base (this=0x3834f008, __in_chrg=<optimized out>)
at C:/Program Files (x86)/CodeBlocks/MinGW/lib/gcc/mingw32/4.9.2/include/c++/tuple:128
如何在我在其他函数的main中声明的堆栈中添加值?我想我没有使用正确的参数,但这是我第一次使用元组和类。
答案 0 :(得分:0)
通过值将堆栈传递给外部子例程似乎不合适,即作为副本。恕我直言,你应该把它作为参考传递:
void read_command(Stack<tuple<string, int, int, int, int> >&S) { ... }
请注意S
之前的&符号。
可能引用应该是不可修改的,不允许该函数修改堆栈:
void read_command(Stack<tuple<string, int, int, int, int> > const &S) { ... }