기본 콘텐츠로 건너뛰기

윈도우에서 오라클19c 설치 중 ins-35180 오류 발생 시 조치 방법

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 레퍼런스

댓글

이 블로그의 인기 게시물

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

특정 프로세스를 강제 종료 하려는데... "실행 중인 작업 인스턴스가 없습니다." 이런 메시지가 나타나면서 종료가 안되는 문제가 있었습니다. 작업 관리자에서 "프로세스 종료", "프로세스 트리 종료" 해봐도 안되고, cmd에서 taskkill 해봐도 안되고... 그런데 이게 부모 프로세스를 종료하면 자동으로 종료가 되네요.. (제 경우에는 Visual Studio가 부모 프로세스였습니다. ㅋ) 참고: DEVPIA http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=917792&ref=917791