0

我尝试使用 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

怎么了 ?

谢谢

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 回答