私はこれをやろうとしています:
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;
}