기본 콘텐츠로 건너뛰기

10월, 2013의 게시물 표시

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