2011-10-06 4 views
1

나는 숯불 *와 문자열을 대체하기 위해 노력하고는 strng :: 교체가 CONST 문자열이 아닌 무엇을 거부 *이문자열을 사용하는 방법 :: 숯불로 교체 *

map<string,char *> renamed_files; 
    map<string,char *>::iterator rename_it; 

이 있습니까 cPath를 사용하여 맵에서 하위 문자열을 대체하는 방법은 무엇입니까?

rename_it = renamed_files.begin(); 
    char cPath[1024]; 
    string strpath = cPath; 
    rename_it->first.replace(0,len, strpath); 
+0

당신은 const char *를 의미합니다. .. 맞습니까? char *를 const char *로 변환하기 위해 const_cast를 사용하지 않는 이유는 무엇입니까? – Arunmu

+1

* 키 *를 실제로 변경하려고합니까? –

+0

그래도 문자열 바꾸기를 시도하고 있습니다. 컴파일하는 것이 전혀 아닙니다. 문자열 :: replace는 11 가지 유형의 오버로드를 인식하지 못합니다. – roymustang86

답변

6

아니요, 맵의 키는 const입니다. 따라서 문제는 rename_it->first은 const이지만 replace은 (물론) 비 const 멤버 함수입니다.

어떻게 든 수정하면 맵에서 항목의 정확한 위치가 변경되지만지도에서 문자열을 변경하고 있음을 감지 할 수 없기 때문에 항목을 이동할 수 없습니다. 전체적인 문제를 피하기 위해 수정은 금지되어 있습니다.

항목을 제거하고 다른 값이지만 같은 값을 가진 새 항목을 추가 할 수 있습니다. 반복기의 유효성에주의해야합니다.