我正在为b树创建自己的迭代器,而且我一直坚持如何在没有编译器抱怨的情况下实现后增量运算符。
错误消息如下所示,并且是预期的(因为我正在执行错误消息所说的内容)
cc1plus: warnings being treated as errors
error: reference to local variable 'temp' returned
我需要使用-Wall和-Werror标记来编写函数,所以希望有人能够帮助我解决这个问题。
这是功能:
template <typename T> btree_iterator<T>& btree_iterator<T>::operator++(int) {
btree_iterator<T> temp(*this);
pointee_ = pointee_->nextNode();
return temp;
}
我环顾四周,而且我只能找到实施操作员的人员的例子。
每当我之前遇到这样的问题时,我'新'了我正在返回的对象,以便它不再是临时的。但由于这是一个迭代器,如果我这样做,我将无法释放内存,从而导致内存泄漏。
如果有人能够帮助我,那将非常感激!如果我的设计还有其他任何可以帮助您理解问题的信息,请告诉我。
问候。
答案 0 :(得分:6)
错误很明显 -
error: reference to local variable 'temp' returned
在您的函数中,您返回对temp
的引用,这是临时对象。
也许您需要返回副本(因为您不想使用new
)。所以,改为
template <typename T> btree_iterator<T>& btree_iterator<T>::operator++(int) {
你可能需要
// note the missing `&`...............vv
template <typename T> btree_iterator<T> btree_iterator<T>::operator++(int) {
答案 1 :(得分:3)
您正在返回对临时变量的引用。将您的声明更改为:
template <typename T> btree_iterator<T> btree_iterator<T>::operator++(int);