STL std::map 사용시 "이항 '[' : 왼쪽 피연산자로 'const std::map<_Kty,_Ty>' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다." 에러 해결법

다음의 코드를 봐주세요.

class Test
{
    /* 생략 */
    Item* m_pSelectedItem;
    std::map<int, Item*> m_map;

    int Test::GetSelectedItemIndex() const;
}

int Test::GetSelectedItemIndex() const
{
    for(int i = 0; i < 10; ++i)
    {
        if(m_pSelectedItem == m_map[i])
        {
            return i;
        }
    }

    return -1;
}


컴파일을 해보면 이상하게도 위에서 밑줄친 부분에 "이항 '[' : 왼쪽 피연산자로 'const std::map&lt;_Kty,_Ty&gt;' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다."라는 에러 메시지가 나타납니다.

한참을 해맸는데, 원인은 메서드를 const로 선언한 탓이었습니다.
map의 [] 연산자는 const가 아니라서 const로 선언된 메서드에서 사용할 수 없습니다.
(map[i]를 할 때, 없는 원소인 경우에는 NULL 객체를 삽입한다고 합니다.)

즉 오류를 해결하려면, "int Test::GetSelectedItemIndex() const"를 "int Test::GetSelectedItemIndex()"로 바꾸어 주시면 됩니다.

참고:
* stl map쓰는데 에러가 납니다
* std::map 의 무서운 비밀
* std::map 레퍼런스

댓글

이 블로그의 인기 게시물

프로세스 강제 종료 불가 시.

Visual Studio 디버깅 시 멈춰있는 문제