0

クラスで定義された 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> > > > >}’

あなたの親切な助けを大切にします。

ありがとうございます

4

1 に答える 1

1

iterator_begin()関数の戻り値の型が正しくありません。正しい宣言は次のとおりです。

mindex::nth_index_iterator<0>::type iterator_begin() const;
于 2012-05-08T10:30:00.783 に答える