正在初始化std::map迭代器类成员
Initializing a std::map iterator class member
我正在尝试这样做:
typedef std::map<std::string, time_t> my_map;
const mymap& some_function();
class bla
{
private:
my_map::iterator current
bla(const mymap& m) : current(m.begin())
{ }
}
它不起作用。更复杂的实际错误信息是:
错误:没有用于调用"std::_Rb_tree_iterator,long int>>::_Rb_tree_iterator(std::map,long int>::const_iterator)"的匹配函数
我尝试将初始化/赋值移动到构造函数主体:
{ current = m.begin(); }
这也没用。所以我想,current
的类型是错误的,所以我只是让编译器推断:
...
decltype(my_map::begin()) current;
...
这也不起作用。
我所需要的只是一个在bla
构建时设置的迭代器成员,所以我不必在一些愚蠢的额外函数中显式设置它,并且可以通过以下方式在外部迭代映射:
bool bla::do_stuff(...output...)
{
if(current = m.end())
return false;
balblabla(current);
++current;
return true;
}
您正试图将const_iterator
分配给iterator
。有两种解决方案:
- 通过非常量引用(
bla(my_map& m) : current(m.begin()) {}
)获取映射 - 将成员类型更改为
const_iterator
在const上下文中,您只能获得const_iterator
:
my_map::const_iterator current;
bla(const my_map & m) : current(m.begin()) { }
如果您想要一个非常量迭代器,则必须从非常量引用构造bla
对象。
相关文章:
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 如何将迭代器调用转发给类的私有成员?
- 成员函数中的迭代器出现问题
- 如何在C++中仅获取容器内类成员的迭代器
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么向量的.at()成员函数返回引用而不是迭代器
- 将列表迭代器存储为成员
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 树不维护递归迭代器成员
- 如何将迭代器变量声明为私有成员变量
- 我如何从循环内部使用迭代器的函数内部的getter中检索特定的成员
- C :我可以将成员变量的迭代器带入班级之一
- 如何使用C STD :: SET中的迭代器访问成员功能
- C++:将成员容器的迭代器接口转发到类接口
- 如何从 std 容器的迭代器为成员元素创建迭代器
- 通过迭代器为映射的成员赋值
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- C++迭代器作为类方法中使用的类成员
- 类成员向量上的迭代器未正确取消引用