stock存储模板类指针

在做数据结构遍历二叉树的时候,遇到了一个问题,在遍历的时候我利用了stock来储存模板类指针,push的时候可以储存,然而在pop的时候,vs提示无法将void类型转化为对应的指针类型。


错误类型:C2204


原因(个人猜想):在使用的时候,储存的时候模板还未实例化,所以存储的时候就是一个void,但是pop的时候我想让她转化为模板类指针,编译器认为类型不匹配所以报错。


真正原因(大神解答版):

pop返回值类型是void。因为如果返回非void类型,返回时会调用复制构造函数,如果其中抛出异常就会在未完成构造的情况下中断且无法简单回滚,无法保证容器的异常安全性,所以在std::stack的设计时就考虑把返回栈顶元素的功能交给其它成员函数实现,这个成员函数的原型是const typename std::stack<T>::value_type& std::stack<T>::top() const;,在std::stack的类作用域内简作const value_type top() const;,其中value_type是元素类型。


问题最终解决方案:改用函数,不仅仅使用pop函数,在获取栈顶值的时候,利用top函数!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值