0

Boost Iterator を使用して双方向イテレータを作成しようとしています。ここのドキュメントで提案されているように、いくつかの機能を実装しました。

実装する関数が純粋仮想として宣言されている親クラスがあります (ポリモーフィック イテレータが必要です)。今のところ、関数が実装されている継承クラスが 1 つあります。さらに、boost::bidirectional_traversal_tag を使用します。

dereference() 関数は、継承されたクラスで次のように実装されます。

template <typename T>
T& ImageIterator_NotPlanar<T>::dereference() const {
  return *((T*)buffer);
}

次の例のように値を読み取るには、完全に機能します。

for (; !iter.isEndReached(); ++iter)
  cout << "ITERATOR INC: " << *iter << endl;

( isEndReached() は個人用関数です)。問題は、次のコードが機能しないことです。

*iter = 3;

g++ は次のエラーを返します。

lvalue required as left operand of assignment

なにが問題ですか ?

ありがとう

4

1 に答える 1

0

エラーが発生した場所を正確に確認する必要があります。また、適切な非定数バージョンがあることを前提としています。

それはあなたが持っている必要があるかもしれません

template <typename T>
T& ImageIterator_NotPlanar<T>::dereference() {
  return *((T*)buffer);
}

template <typename T>
T const& ImageIterator_NotPlanar<T>::dereference() const {
  return *((T*)buffer);
}
于 2011-07-01T15:09:50.740 に答える