STL std::map 사용시 "이항 '[' : 왼쪽 피연산자로 'const std::map<_Kty,_Ty>' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다." 에러 해결법
다음의 코드를 봐주세요.
컴파일을 해보면 이상하게도 위에서 밑줄친 부분에 "이항 '[' : 왼쪽 피연산자로 'const std::map<_Kty,_Ty>' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다."라는 에러 메시지가 나타납니다.
한참을 해맸는데, 원인은 메서드를 const로 선언한 탓이었습니다.
map의 [] 연산자는 const가 아니라서 const로 선언된 메서드에서 사용할 수 없습니다.
(map[i]를 할 때, 없는 원소인 경우에는 NULL 객체를 삽입한다고 합니다.)
즉 오류를 해결하려면, "int Test::GetSelectedItemIndex() const"를 "int Test::GetSelectedItemIndex()"로 바꾸어 주시면 됩니다.
참고:
* stl map쓰는데 에러가 납니다
* std::map 의 무서운 비밀
* std::map 레퍼런스
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<_Kty,_Ty>' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다."라는 에러 메시지가 나타납니다.
한참을 해맸는데, 원인은 메서드를 const로 선언한 탓이었습니다.
map의 [] 연산자는 const가 아니라서 const로 선언된 메서드에서 사용할 수 없습니다.
(map[i]를 할 때, 없는 원소인 경우에는 NULL 객체를 삽입한다고 합니다.)
즉 오류를 해결하려면, "int Test::GetSelectedItemIndex() const"를 "int Test::GetSelectedItemIndex()"로 바꾸어 주시면 됩니다.
참고:
* stl map쓰는데 에러가 납니다
* std::map 의 무서운 비밀
* std::map 레퍼런스
댓글
댓글 쓰기