4

だから、私は手を出そうとしていてmulti_index_container、かなり奇妙なコンパイラエラーが発生しています.最初に、私の問題を示す最も簡単な例を示します(おそらく愚かな単純なものが欠けています)...

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

namespace multi_index = boost::multi_index;

template <typename _IdType>
class A
{
public:
  typedef _IdType IdType;
  IdType getId() const { return id; }

private:
  IdType id;
};

struct id_index{};

template <typename Traits>
class Container
{
  typedef typename Traits::AType AType;
  typedef typename AType::IdType IdType;

  typedef typename multi_index::multi_index_container<
    AType,
    multi_index::indexed_by<
      // sort by Id
      multi_index::ordered_non_unique<multi_index::tag<id_index>, BOOST_MULTI_INDEX_CONST_MEM_FUN(AType, IdType, getId) >
    >
  > ASet;

  typedef typename ASet::template index<id_index>::type::const_iterator a_it;
  typedef typename ASet::template index<id_index>::type::reverse_iterator a_rit;

  typedef typename ASet::template index<id_index>::type id_index_t;

public:

  bool addA(AType const& cA)
  {
    const id_index_t& os = _cSet.get<id_index>(); // line 1: errors occur here
    // .. do stuff
    return true;
  }

private:
  // Instance of the container...
  ASet _cSet;
};

struct ATraits
{
  typedef A<int> AType;
};

int main(void)
{
  Container<ATraits> container;

  ATraits::AType a;

  container.addA(a);

  return 0;
}

g++ (gcc 4.4.4、linux) によって報告されるエラーは次のとおりです。

error: expected primary-expression before ‘&gt;’ token (@ line 1)
error: expected primary-expression before ‘)’ token (@ line 1)

したがって、コンテナをクラステンプレートに変換するまで、これは正常に機能していましたが、その後、このエラーが発生し、理由がわかりません..

どんなアイデアでも大歓迎です...

4

1 に答える 1

7
  bool addA(AType const& cA)
  {
    const id_index_t& os = _cSet.template get<id_index>(); // line 1: errors occur here
    // .. do stuff
    return true;
  }
于 2010-12-15T15:43:29.463 に答える