C++ Boost双向迭代器不可写的问题

C++ Boost双向迭代器不可写的问题,c++,boost,iterator,boost-iterators,C++,Boost,Iterator,Boost Iterators,我尝试用Boost迭代器生成双向迭代器。我已经实现了文档中建议的一些功能 我有一个父类,其中要实现的函数被声明为纯虚拟的(我需要多态迭代器)。目前,我有一个继承的类,其中实现了函数。此外,我使用boost::双向遍历标记 dereference()函数在继承的类中实现如下: template <typename T> T& ImageIterator_NotPlanar<T>::dereference() const { return *((T*)buffer

我尝试用Boost迭代器生成双向迭代器。我已经实现了文档中建议的一些功能

我有一个父类,其中要实现的函数被声明为纯虚拟的(我需要多态迭代器)。目前,我有一个继承的类,其中实现了函数。此外,我使用boost::双向遍历标记

dereference()函数在继承的类中实现如下:

template <typename T>
T& ImageIterator_NotPlanar<T>::dereference() const {
  return *((T*)buffer);
}
g++返回以下错误:

lvalue required as left operand of assignment
怎么了

谢谢

我们需要查看错误产生的确切位置。此外,我们必须假设您具有正确的非常量版本

你需要什么

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

template <typename T>
T const& ImageIterator_NotPlanar<T>::dereference() const {
  return *((T*)buffer);
}
模板
T&ImageIterator_notplane::解引用(){
返回*((T*)缓冲区);
}
模板
常量&ImageIterator\u NotPlanar::dereference()常量{
返回*((T*)缓冲区);
}

谢谢,我试图删除您的第一个命题,即取消引用()后的常量,但出现了错误“没有用于调用…取消引用()常量的匹配函数”。我不知道如何用Boost迭代器生成一个可写迭代器,老实说,我认为文档在这个主题上是不可理解的。对于错误,它来自于
*iter=3
,我没有来自编译器的更多信息。谢谢您是否创建了如图所示的两个重载?此外,您应该能够提供最少的工作示例和带有行号的编译器消息。编译器报告行号。是的,我创建了重载,但我认为它们不是重载,因为boost不调用这样的函数。对于编译器,我唯一的错误是
/home/benlaug/projets/tfe/tfe_seg_perfs/test/main_test.cc:79:11:错误:赋值的左操作数需要左值,main_test.cc:79是
*iter=3。我真的不明白如何创建可写迭代器。同一作用域中具有相同名称的两个函数是按定义重载的。我理解您的意思是说他们没有被调用(boost很可能希望您专门制定一个取消引用的“策略”,以避免虚拟化的成本)。只需发布一个工作示例,我们将在几秒钟内发现问题。我保证。这里有大量的C++知识。这是不工作的问题缺乏清晰度的问题是,代码有点长。是否有一个指向站点的链接作为pastebin就可以了?我在iterator_facade文档中发现了一个新元素。在迭代器(iterator)facade operations一节中,有
reference操作符*()const。显然,没有办法生成可写的双向迭代器。感谢您的帮助。该错误可能意味着您从
迭代器
派生时传递了不正确的
引用
模板。遗憾的是,您没有发布完整的迭代器定义,因为错误可能很明显。
lvalue required as left operand of assignment
template <typename T>
T& ImageIterator_NotPlanar<T>::dereference() {
  return *((T*)buffer);
}

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