3

我目前正在为 b-tree 创建自己的迭代器,并且我一直坚持如何在编译器不抱怨的情况下实现后增量运算符。

错误消息如下,并且是预期的(因为我完全按照错误消息所说的那样做)

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;
}

我环顾四周,我只能找到实施运营商的人的例子,这正是我目前的情况。

每当我以前遇到这样的问题时,我都会对要返回的对象进行“新”处理,这样它就不再是临时的了。但由于这是一个迭代器,如果我这样做了,之后我将无法释放内存,从而导致内存泄漏。

如果有人能够帮助我,那将不胜感激!如果我的设计还有什么可以帮助您理解问题的,请告诉我。

问候。

4

2 回答 2

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) {
于 2011-10-21T07:26:25.153 回答
3

您正在返回对临时变量的引用。将您的声明更改为:

template <typename T> btree_iterator<T> btree_iterator<T>::operator++(int);
于 2011-10-21T07:26:57.727 回答