Проблема с Boost двунаправленным итератором недоступна для записи - PullRequest
0 голосов
/ 01 июля 2011

Я пытаюсь сделать двунаправленные итераторы с Boost Iterator. Я реализовал некоторые функции, как предложено в документации здесь .

У меня есть родительский класс, в котором функции для реализации объявлены чисто виртуальными (мне нужны полиморфные итераторы). На данный момент у меня есть один унаследованный класс, в котором реализованы функции. Более того, я использую 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

Что не так?

Спасибо

1 Ответ

0 голосов
/ 01 июля 2011

Нам нужно увидеть точно , где генерируется ошибка.Кроме того, мы должны предположить, что у вас есть правильная неконстантная версия

Возможно, вам нужна

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

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