【问题标题】:How to pass my class template into function? (C++)如何将我的类模板传递给函数? (C++)
【发布时间】:2013-01-20 23:40:43
【问题描述】:

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

这是我的主要内容:
编辑:
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 对象传递给这些函数?
还是我的堆栈头有误?

感谢您的帮助。

【问题讨论】:

  • 下面提供的答案是正确的,有关将对象传递给函数时的不同选项的详细说明,请参阅我对这个问题的回答:stackoverflow.com/questions/7677007/…
  • 这是你的真实代码吗?因为你addItems/removeItems 使用了形式参数Stack<Type> stack 并且在这些函数的后面你总是访问intStack...所以你忽略这个参数并且应该得到一个编译器错误,除非intStack 是一个全局变量。

标签: c++ class templates


【解决方案1】:

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

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

你需要通过引用传递:

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

【讨论】:

  • 好的,有帮助,谢谢! (我还没有看到我在代码中的错误,并且有一段时间没有工作,但没关系)
【解决方案2】:

void addItems(堆栈堆栈);

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

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

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多