내가 아래 첨자 연산자를 재정의하려는 예제 Map 클래스가 있습니다. 클래스의 사용자가지도를 읽고 쓸 수있게합니다. 지도 [ "a"]가 읽히고,지도 [ "a"] = "something"이 (가) 클래스의 쓰기가됩니다. 그러나, 나는 물건의 할당 연산자 측면을 사용하는 방법을 알아낼 수 없으며 전달 된 값으로 그것을 대체 할 수 있습니다. 나는 그냥 "분할 오류"여기첨자 연산자 오버플로
읽는 새로운 값을 할당하려고하면 지금, 내가 지금까지 무엇을 가지고 :
VALUE_TYPE& Map::operator[](KEY_TYPE a){
cout << "hmm" << endl;
}
Map& Map::operator=(const Map &rhs){
//cout << "operator = " << endl;
}
지금 내가 어떤 코드가 없습니다 .. 그들은 단지 그들이 성공적으로 부름받을 것을보고 싶었습니다. 나는 세그먼트 오류를 얻을 것이다
Map["a"] = "hey";
과 같은 일을 할 경우 내가 알아낼 수없는 무엇
이다. 특정 키에 새로운 값을 할당하려고 할 때 할당 연산자 =가 호출 될 것이라고 가정하고있었습니다. 내가 뭔가 잘못하고 있는거야?
그런데 VALUE_TYPE 및 KEY_TYPE은 문자열로 정의되며 각 키의 값은 관련되어 있습니다.
이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –
처음보세요. 운영자는 '맵'권한이 아닌'유형 '을 가져야합니다. 왜냐하면'Map [a]'는 map의 요소를 반환 할 것이기 때문이다. 지도가 아닙니다. 그것이지도의지도가 아니라면. –
연산자 =는 단일 요소가 아닌 전체 맵을 할당합니다. –