2004년 11월 23일 화요일

STL map, const_iterator에 관한 discard qualifiers 에러

1.
STL의 map, multimap, hash_map [] operator는
const가 아님.
key가 없으면 key를 만들어 주기 때문에 modify가 일어남
따라서 [] operator를 이용하여 access하면

"discards qualifiers" 에러가 날 수 있다.

예)
passing `const Str_Str_Map' as `this' argument of `_Tp&
   __gnu_cxx::hash_map<_Key, _Tp, _HashFcn, _EqualKey,
   _Alloc>::operator[](__gnu_cxx::hashtable<std::pair<const _Key, _Tp>, _Key,
   _HashFcn, std::_Select1st<std::pair<const _Key, _Tp> >, _EqualKey,
   _Alloc>::key_type&) [with _Key = std::string, _Tp = std::string, _HashFcn =
   string_hash, _EqualKey = std::equal_to<std::string>, _Alloc =
   std::allocator<std::string>]' discards qualifiers

해결책)
[] operator 대신 find를 이용한다.

2. const_iterator를 return value로 넘기는 method는 const가 되어야 함.
예)
typename vector<T>::const_iterator end() const
{
    return t_vec_.end();
}

그렇지 않으면 call하는 부분에서 에러가 남.

댓글 없음:

댓글 쓰기