У меня проблема с преобразованием следующего кода из c в C++:
У меня есть функция, которая принимает массив последовательностей перемещения (последовательность символов от a до i) в качестве arg.указатель на массив символов C++
код:
void mkmove(char** move) {
int i = 0;
char* p = NULL;
int moves[9][9];
for(int i = 0; i < 9; i++) {
for(p = move[i]; *p; p++) {
moves[i][*p - 'a'] = 3;
}
}
}
int main() {
char* movestr[] = {"abde", "abc", "bcef", "adg", "bdefh", "cfi", "degh", "ghi", "efhi"};
mkmove(movestr);
return(0);
}
GCC компилирует этот код отлично, но если я пытаюсь скомпилировать его с г ++ он дает мне следующее предупреждение:
main.cpp: 17: 39: предупреждение: не рекомендуется использовать преобразование из строки константа в 'char *' [-Wwrite-strings]
Я считаю, что это предупреждение исходит из того факта, что строка в C определяется как char [], в то время как C++ использует std :: string.
Так что я попытался заменить код, чтобы использовать строки C++, как это:
void mkmove(std::string* move) {
в mkmove функции Defenition, а также:
std::string* movestr = {'abde', "abc", "bcef", "adg", "bdefh", "cfi", "degh", "ghi", "efhi"};
в основной функции и добавьте ++ файл заголовка строки C:
#include <string>
, но теперь я получаю ошибки:
main.cpp: В функции 'void mkmove (std :: string *)':
main.cpp: 11: 21: error: невозможно преобразовать 'std :: string {aka std :: basic_string}' в 'char *' при назначении
main.cpp: В функции 'int main()':
main.cpp: 19: 39: ошибка: скалярный объект 'movestr' требует наличия одного элемента в инициализаторе
Я также пробовал некоторые другие настройки, но это дало мне меньше ошибок при компиляции.
Итак, что является правильным способом преобразования верхнего кода с C на C++?
Спасибо за ответы!
-Slovenia1337
Или (и sing C++ 11) 'std :: vector movestr = {" abde "," abc ", ...}; ' –
bames53