在做数据结构遍历二叉树的时候,遇到了一个问题,在遍历的时候我利用了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函数!