繁体   English   中英

初始化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 有两种解决方案:

  1. 通过非常量引用( bla(my_map& m) : current(m.begin()) {} )获取地图。
  2. 将成员类型更改为const_iterator

在const上下文中,您只能获取const_iterator

my_map::const_iterator current;
bla(const my_map & m) : current(m.begin()) { }

如果要使用非常量迭代器,则必须从非常量引用构造bla对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM