2012-05-08 6 views
0

私のクラスで定義されているmulti_indexイテレータがあります。特定のインデックスに基づいてコンテナを反復処理する権限をユーザーに与える必要があります。私はちょうどそれを行う方法を知らない。あなたは私を助けてくださいことができます:ブーストの開始と終了を返す方法multi_indexイテレータ

#include <boost/multi_index_container.hpp> 
#include <boost/multi_index/ordered_index.hpp> 
#include <boost/multi_index/identity.hpp> 
#include <boost/multi_index/member.hpp> 

using namespace ::boost; 
using namespace ::boost::multi_index; 

struct RoadNetwork{ 
     int n; 
     int m; 
     RoadNetwork(int q = 0,int p = 0){ n = q; m = p;}; 
}; 

class A 
{ 
public: 
    typedef multi_index_container< 
    RoadNetwork, 
     indexed_by< 
      ordered_unique<identity<RoadNetwork> >, 
      ordered_non_unique<member<RoadNetwork, int, &RoadNetwork::n> > 

     > 
    > mindex; 
    mindex i; 

     const mindex::nth_index<0>::type& iterator_begin() const 
     { 
      return i.get<0>().begin(); 
     } 

}; 

int main(void){ 
    A a; 

    return 0; 
} 

をエラーは次のとおりです。

~/workspace/multiIndex$ g++ main.cpp main.cpp: In member function ‘const type& A::iterator_begin() const’: main.cpp:30:34: error: invalid initialization of reference of type ‘const type& {aka const boost::multi_index::detail::ordered_index<boost::multi_index::identity<RoadNetwork>, std::less<RoadNetwork>, boost::multi_index::detail::nth_layer<1, RoadNetwork, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::identity<RoadNetwork> 
>, 

boost::multi_index::ordered_non_unique<boost::multi_index::member<RoadNetwork, int, &RoadNetwork::n> > >, std::allocator<RoadNetwork> >, boost::mpl::vector0<mpl_::na>, boost::multi_index::detail::ordered_unique_tag>&}’ from expression of type ‘boost::multi_index::detail::ordered_index<boost::multi_index::identity<RoadNetwork>, 


std::less<RoadNetwork>, boost::multi_index::detail::nth_layer<1, RoadNetwork, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::identity<RoadNetwork> 
>, 

boost::multi_index::ordered_non_unique<boost::multi_index::member<RoadNetwork, int, &RoadNetwork::n> > >, std::allocator<RoadNetwork> >, boost::mpl::vector0<mpl_::na>, boost::multi_index::detail::ordered_unique_tag>::const_iterator {aka 

boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<RoadNetwork, std::allocator<RoadNetwork> > > > >}’ 

私はあなたのようなものの助けを重視します。

+0

誰でもお答えください! – rahman

答えて

1

iterator_begin()関数の戻り値の型が間違っている、あなたとよろしくお願いします。正しい宣言は:

mindex::nth_index_iterator<0>::type iterator_begin() const; 
+2

nth_index_iteratorの代わりにnth_index <…> :: iteratorが使用されています。 – BatchyX

+0

@BatchyXあなたはそれがどのようになるかを提案できますか? mindex :: nth_index <0> :: iterator iterator_begin()const; ??私はそれを試して、それを言う:エラー: '反復子'の構造体boost :: multi_index :: multi_index_container >>> :: nth_index <0> 'はタイプ名を指定しません – rahman

+0

'typename mindex :: nth_index <0> :: iterator iterator_begin()const;'? – BatchyX

関連する問題