使用 boost::any_range 时非常量引用错误的初始化无效
Invalid initialization of non-const reference error while using boost::any_range
>我正在编写一个抽象std::map
std::vector
和boost::unordered_map
的包装类,为此,我定义了封装每个容器的单独容器类和这些类通用的抽象基类。另一个名为 MyWrapper
的类重载 []
运算符,并在抽象基类的指针上调用方法以获取值。它还从boost::any_range
创建自定义迭代器以循环访问值。这是我的包装器和基类:
class MyClass{
ContainerBase* cb;
//my custom iterator
typedef boost::any_range<valT,boost::bidirectional_traversal_tag,
valT&,std::ptrdiff_t>::iterator iterator;
// other methods and costructor
const valT& operator[](size_t idx) const{
return cb->getValueAtkey[idx];
}
iterator begin(){
return cb->getbegin();
}
}
class ContainerBase{
//other methods
virtual valT& getValueAtKey(size_t); //calls the underlying container's subscript
virtual MyClass::iterator getbegin();
}
我正在使用模板化映射类并在其上定义自定义迭代器,使用 boost::transform_iterator
遍历键值,如下所示:
template<class MapType> //std::map or boost::unordered_map
class MapDerived : public ContainerBase{
MapType cont;
typedef boost::transform_iterator<value_extractor,typename MapType::iterator> value_iterator;
MyClass::iterator getbegin(){
return MyClasss::iterator(
boost::make_transform_iterator<value_extractor,typename MapType::iterator>(cont.begin(),value_extractor()
);
} //similar function for end iterators
}
我在编译时收到以下错误:
..boost/range/detail/any_iterator_wrapper.hpp:356:
error: invalid initialization of non-const reference of type 'valT&' from a temporary of type 'int'
前面是return cb->getValueAtkey[idx];
MyClass::operator[]()
处的instantiated from here
消息
我对提升相对较新,因此无法弄清楚我哪里出了问题。任何帮助将不胜感激。
乍一看,你只有一个const operator[]()
,这称为非常量getValueAtKey()
。尝试添加非常量operator[]()
或添加常量getValueAtKey()
。
相关文章:
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- C++引用错误
- 已定义函数时出现 G++ "未定义的引用"错误
- 错误:使用通用引用的声明冲突
- 链接 cmake 时出现未定义的引用错误
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 隐式重新解释引用时强制转换,没有警告/错误
- 只有级联分类器会发出未定义的引用错误
- 错误:未定义对cv::cudacodec::createVideoReader的引用
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- 对于我的 ComplexNumber 中的某些方法,我得到了一个奇怪的未定义错误引用.cpp,不过我对模板很陌生
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值
- Qt并发错误:引用非静态成员