3

私は現在、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;
}

周りを見回してみたところ、今の自分の姿を正確に実装している人の例しか見つかりませんでした。

以前にこのような問題が発生したときはいつでも、返されるオブジェクトを「新しい」ものにして、一時的なものではなくなった。ただし、これはイテレータであるため、これを実行すると、後でメモリを解放できなくなり、メモリリークが発生します。

誰かが私を助けることができれば、それは大いにありがたいです!問題を理解するのに役立つ私のデザインについて他に何かあれば教えてください。

よろしく。

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 に答える