Как использовать строку :: заменить на символ * - PullRequest
1 голос
/ 06 октября 2011

Я пытаюсь заменить подстроку на char *, strng :: replace отказывается принимать все, что не является константной строкой *

   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);

1 Ответ

6 голосов
/ 06 октября 2011

Нет, ключ на карте постоянный. Следовательно, проблема в том, что rename_it->first является константой, но replace является (конечно) неконстантной функцией-членом.

Если бы вы как-то изменили его, это изменило бы правильное положение записи на карте, но карта не может определить, что вы изменяете строку, поэтому она не может переместить запись. Чтобы избежать всей проблемы, модификация запрещена.

Вы можете удалить запись и добавить новую с другим ключом, но с тем же значением. Будьте осторожны с действительностью вашего итератора, когда делаете это.

...