그래서 multi_index_container
으로 손대지 않으려 고 노력하고 있는데 이상한 컴파일러 오류가 발생했다. 가장 간단한 예가 여기에있다. 뭔가 바보 간단) ... g에 의해보고부스트 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;
}
오류 ++ (GCC 4.4.4, 리눅스)입니다 : 나는 클래스 템플릿에 컨테이너를 개조까지
error: expected primary-expression before ‘>’ token (@ line 1)
error: expected primary-expression before ‘)’ token (@ line 1)
그래서이 잘 작동했다 ,이 후, 나는이 오류가 발생하고 왜 작동하지 않을 수 있습니다 ..
모든 아이디어를 ... 이해할 수있을 것이다
@Arak, gcc odity라고 생각합니다. 그러나 @skwllsp의 해결책은 현재 잘 작동합니다! – Nim