나는 멀티 인덱스 컨테이너 요소를 향상시킬 수 없다는 것을 눈치 챘다. 사실입니까? (다음의 간단한 코드를 기반으로) "업데이트"기능을 살펴보십시오.부스트 멀티 인덱스의 읽기 전용 요소를 수정하는 방법은 무엇입니까?
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/random_access_index.hpp>
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/member.hpp>
namespace sim_mob
{
enum TrafficColor
{
Red =1, ///< Stop, do not go beyond the stop line.
Amber = 2, ///< Slow-down, prepare to stop before the stop line.
Green = 3, ///< Proceed either in the forward, left, or right direction.
FlashingRed = 4, ///future use
FlashingAmber = 5, ///future use
FlashingGreen = 6 ///future use
};
//Forward declarations
class Link
{
public:
int aa;
};
//////////////some bundling ///////////////////
using namespace ::boost;
using namespace ::boost::multi_index;
typedef struct
{
sim_mob::Link *LinkTo;
sim_mob::Link *LinkFrom;
// ColorSequence colorSequence;
TrafficColor currColor;
} linkToLink;
typedef multi_index_container<
linkToLink,
indexed_by< // index
random_access<>,//0
ordered_non_unique< member<linkToLink,sim_mob::Link *, &linkToLink::LinkTo> >, // 1
ordered_non_unique< member<linkToLink,sim_mob::Link *, &linkToLink::LinkFrom> > // 2
>
> links_map;
class Phase
{
public:
typedef links_map::nth_index_iterator<1>::type LinkTo_Iterator;
Phase(double CycleLenght,std::size_t start, std::size_t percent): cycleLength(CycleLenght),startPecentage(start),percentage(percent){
};
void update(double lapse)
{
links_map_[0].currColor = Red;
}
std::string name;
private:
sim_mob::links_map links_map_;
};
}//namespace
int main()
{
sim_mob::Phase F(100,70,30);
}
전체 프로그램을 거칠 필요가 없습니다. 그냥 업데이트 메서드에서이 오류가 발생합니다. multiIndex $ C++ exp2.cpp exp2.cpp : 멤버 함수 'void sim_mob :: Phase :: update (double)': exp2.cpp : 69 : 29 : error : 읽기 전용 객체에서 'sim_mob :: linkToLink :: currColor'멤버를 할당하십시오.
반복자가 const 액세스 만 허용한다는 것을 단지 boost tutorial으로 읽었습니다. 이 문제를 어떻게 해결할 수 있습니까? 도움을 주셔서 감사합니다.
감사합니다. 내 코드 예제를 수정하여 필요한 부분과 방법을 표시 할 수 있다면 더 많은 정보와 도움이 될 것입니다 (특히 나에게). 가변적 인 솔루션으로 충분할 것입니다. 고마워, 안부. – rahman