2011-10-06 84 views
1

我試圖替換字符*子串,該strng ::替代拒絕接受任何不是一個常量字符串*如何使用string ::使用char *代替

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 * ..對嗎?爲什麼不使用const_cast將char *轉換爲const char *? – Arunmu

+1

你真的想改變*鍵*嗎? –

+0

即使如此,我想做一個字符串替換,它根本不編譯,它給了我錯誤說,字符串::替換不承認任何11種過載。 – roymustang86

回答

6

不,地圖中的鍵是常量。因此問題是rename_it->first是const,但是replace(當然)是一個非const成員函數。

如果以某種方式修改它,那會改變地圖中條目的正確位置,但地圖無法檢測到您正在更改字符串,因此無法移動條目。爲了避免整個問題,修改是被禁止的。

您可以刪除條目並使用不同的鍵添加新條目,但具有相同的值。當你這樣做時,要小心你的迭代器的有效性。