如何将我的类模板传递给函数? (C ++)

时间:2013-01-20 23:40:43

标签: c++ class templates

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

这是我的主要内容:
编辑:
1.在addItems / removeItems中,有堆栈变量,而不是intStack
2.纠正 - >至 。 (我没有看就复制了它,我忘了改变这些操作员)
http://pastebin.com/89M56ET6
..和我的堆栈标题:
http://pastebin.com/xKfQVD88

我想要做的是在main中使用两个“while”循环并将它们的内容放在main之外的单独函数中。我想制作(实际上,它们已经准备好)称为“addItems”和“removeItems”的函数 问题是,我的“添加/删除项目”功能实际上没有做任何事情(我的意思是,我在main中的对象仍然是空的?)。当这些“while”循环正在制作他们所拥有的东西时,一切都很好(物品进入堆叠,然后正确弹出)。当我在main中使用我的“addItems”和“removeItems”而不是循环时,只添加作品(从函数返回后,一切都消失了)。
我试图动态地将我的Stack对象作为指针,但是我得到了像

这样的错误
  

对void addItems(Stack -int-)

的未定义引用

  

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

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

您需要通过引用传递:

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

答案 1 :(得分:0)

  

void addItems(Stack stack);

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

你的Stack对象也没有合适的拷贝构造函数,所以如果你试图复制它也会有一些内存问题。