如何在C ++中将对象用作函数的参数?

时间:2018-03-26 13:18:52

标签: c++ class stack tuples runtime-error

我想实现一个堆栈然后用它来解决问题。我定义了一个 这样命名为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中声明的堆栈中添加值?我想我没有使用正确的参数,但这是我第一次使用元组和类。

1 个答案:

答案 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) { ... }