3

我正在尝试这样做:

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;
}
4

2 回答 2

6

您正在尝试分配const_iteratoriterator. 有两种解决方案:

  1. 通过非常量引用 ( bla(my_map& m) : current(m.begin()) {}) 获取地图。
  2. 将成员类型更改为const_iterator
于 2012-07-12T19:17:08.030 回答
4

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

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

bla如果你想要一个非常量迭代器,你必须从一个非常量引用构造你的对象。

于 2012-07-12T19:15:51.593 回答