2

我有一个“堆栈”类模板,我只需在其中选择堆栈中项目的类型及其大小。

这是我的主要内容:
编辑:
1. 在 addItems/removeItems 中,有堆栈变量,而不是 intStack
2. 更正 -> 为 . (我没有看就复制了它,我忘了更改这些运算符)
http://pastebin.com/89M56ET6
..和我的堆栈头: http:
//pastebin.com/xKfQVD88

我想做的是在 main 中使用两个“while”循环,并将它们的内容放入 main 之外的单独函数中。我想制作(实际上,它们已经准备好了)名为“addItems”和“removeItems”的函数。
问题是,我的“添加/删除项目”函数实际上什么都不做(我的意思是,我的主要对象仍然是空的?)。当这些“while”循环正在做他们必须做的事情时,一切都很好(项目推入堆栈,然后正确弹出)。当我在 main 中使用我的“addItems”和“removeItems”而不是循环时,只添加作品(从函数返回后,一切都消失了)。
我试图动态地将我的 Stack 对象作为指针,但我遇到了类似的错误

对 void addItems(Stack -int-) 的未定义引用

或者

没有匹配的函数调用 addItems(Stack -int- *&)

问题是,我如何将我的 Stack 对象传递给这些函数?
还是我的堆栈标题中的错误?

谢谢你的帮助。

4

2 回答 2

2

问题是您的函数Stack<Type>按值取值,这意味着它们有自己的副本。所以 main 中的对象不会被修改。:

template <class Type>
void addItems(Stack<Type> stack);

您需要通过引用传递:

template <class Type>
void addItems(Stack<Type>& stack);
于 2013-01-20T23:43:26.697 回答
0

无效添加项(堆栈堆栈);

您正在按值传递堆栈,这意味着函数 addItems 接收堆栈对象的副本。通过引用传递它。

此外,您的 Stack 对象没有正确的复制构造函数,因此如果您尝试复制它,也会遇到一些内存问题。

于 2013-01-20T23:48:23.613 回答