Я провел много часов здесь, чтобы найти помощь по поводу того, что, по-видимому, является общей ошибкой, но ни один из тех, что я видел, подходит моему делу.ошибка C2440: '=': невозможно преобразовать из 'const char *' в 'char *'
Я переношу старую программу, написанную на Visual Studio 6 C++, в Visual Studio 2012 и, к счастью, для меня, поскольку я не программист на C++ (просто скромный разработчик VB и C#). Мастер миграции и Интернет помогли мне найти и исправить код, который мастер не может обработать.
В этом блоке кода, который я считаю, ничего не делает больше, чем создание каталога
int CreateAllDirectories(const char* pszDir)
{
char* pszLastSlash;
char cTmp;
if(_access(pszDir, 0) != -1) {
// it already exists
return 0;
}
pszLastSlash = strrchr(pszDir, '\\');
if (pszLastSlash) {
cTmp = *pszLastSlash;
*pszLastSlash = '\0';
// try again with one less dir
CreateAllDirectories(pszDir);
*pszLastSlash = cTmp;
}
if (_mkdir(pszDir) == -1) {
return -1;
}
return 0;
}
ошибка генерируется, когда результаты strrchr (pszDir, «\») назначены на переменная pszLastSlash. Из остальной части этого кода это выглядит как pszLastSlash = strrchr (pszDir, '\'); является допустимым выражением.
Является ли проблема с двойной обратной косой чертой, которая для меня выглядит и уходит от последовательности.
Да, это ответ. Вы также можете предложить изменить 'const char * pszDir' на' char * pszDir', потому что он может быть изменен внутри функции. Или сделайте копию. – soon
Итак, вы рекомендуете, чтобы он попытался изменить параметр 'pszDir' в' CreateAllDirectories() ', чтобы получить облегчение? –
@ Сун: спасибо за комментарий, обновлено. Я думаю, что он должен изменить только constzness pszDir, если он знает, что это безопасно писать, хотя ... – Jimbo