2013-07-06 1 views
1

이 문제는 코드가 보이지 않으면 답할 수 있기를 바랍니다. 문제가있는 곳이 명확하지 않기 때문입니다. 나는 부스트 순서가 지정되지 않은 맵에 operator[]을 사용하여 키를 찾고 매핑 된 벡터를 반환합니다. 이것은 할당 문의 오른쪽에 있지만, 내가 받고있는 오류는 operator[]이 constness를 보장하지 않는다는 것을 암시하는 것처럼 보입니다. 나는 방금 const -correctness를 배우려고 노력하기 시작했습니다. 누군가이 오류를 해독하고 문제가 무엇인지 안내 할 수 있습니까? 또는 세부 정보를 요청하십시오?C++ const-ness, 부스트 정렬되지 않은 맵, 연산자 []

컴파일러는 애플 LLVM 버전 4.2 (그 소리-425.0.28)이다

Block.cpp:89:39: error: no viable overloaded operator[] for type 'const Record_map' (aka 'const unordered_map<Typecode, FV_pair_vec>') 
    FV_pair_vec const fv_vec = records[rec_type]; 
           ~~~~~~~^~~~~~~~~ 
/usr/local/include/boost/unordered/unordered_map.hpp:420:22: note: candidate function not viable: 'this' argument has type 'const Record_map' 
     (aka 'const unordered_map<Typecode, FV_pair_vec>'), but method is not marked const 
     mapped_type& operator[](const key_type&); 
        ^

답변

3

문제는 문제의 운영자가이 const 객체에 호출 할 수 없습니다, 즉, const되지 않는 것입니다 또는 const 참조를 통해 const 버전을 제공하는 대안은 at(key_type const&)입니다. 해당 키 요소를 가진 요소가지도에없는 경우 예외가 발생합니다. 그래서 당신은 unordered_map::find(key_type const&) 방법을 사용, 그렇지 않으면

mapped_type x = theMap.at(theKey); 

대신

mapped_type x = theMap[theKey]; 

로 사용할 수 있습니다.

+0

당신은 ** [...]'theMap [theKey]; ** ** 대신 **을 의미합니까? – Chap

+0

@ 예, 잘 발견했습니다, 고마워요! – juanchopanza

관련 문제