2016-04-04 4 views
0

Прежде всего, мне нужно сказать, что я полный нуб. Я пытаюсь сделать какое-то военное симуляционное моделирование, чтобы создать то, что я создал случайный генератор букв и цифр. Вот код. Кстати, я хочу добиться того, чтобы иметь только одну переменную (Guess), чтобы столкнуться с местами корабля, которые пользователь указал.Ошибка C++: неверное преобразование из 'int' в 'const char *' [-fpermissive] |

char letters[]= {'A','B','C','D','E','F','G','H','I','L'}; 

\\ lots of code 

//RandomAI 
int G = rand() % 10 + 1; 
int nOut = rand() % 10 + 1; 
char lOut = letters[G]; 
string Guess = lOut + nOut; 
return 0; 
+0

'nOut' является целым числом. Поэтому неясно, какой результат вы ожидаете. Должно ли это быть что-то вроде «B3», «E7» и т. Д.? Или вы добавляете 7 к букве (буквально), например. ''A' + 7' равно' 'H''? – PaulMcKenzie

ответ

3

string Guess = lOut + nOut; добавляет int и char типов, которые не производят std::string. Одним из способов решения этой проблемы является создание строки, а затем добавить к нему:

std::string guess = lOut + std::to_string(nOut); 

Это позволит решить вашу ошибку компилятора, но вы по-прежнему есть логическая ошибка здесь:

int G = rand() % 10 + 1; 

rand() % 10 + 1 будет производить значение от 1 до 10 включительно. Вы хотите, чтобы число в диапазоне от 0 до 9 включительно, поскольку индексов в C++ начинаются с 0, а не 1. Таким образом, падением +1 части:

int G = rand() % 10; 

В противном случае вы можете случайно попытаться получить доступ к запретному индексу в letters

+2

'nOut' является целым числом, поэтому не совсем уверен, что ожидал OP. – PaulMcKenzie

+0

@PaulMcKenzie: Да, я сделал предположение, что он намерен снова индексировать «буквы». Я думаю, что это неправильно. Наверное, они хотели что-то вроде 'B3'. Я обновлю свой пост. – AndyG

+0

@PaulMcKenzie: Я собираюсь предположить, что «морское боевое моделирование» означает «Броненосец». – AndyG

0

Предполагая, что вы хотели выходной строки, как «А7» или «F2», один из способов достичь этого было бы преобразовать все в string (так как вы не можете добавлять и int и char). Для тех, кто не имеет доступа к C++ 11 и std::to_string() все же, вы можете использовать:

char letters[]= {'A','B','C','D','E','F','G','H','I','L'}; 
int G = std::rand() % 10; 
int nOut = std::rand() % 10; 
char lOut = letters[G]; 
std::stringstream ss; 
ss << nOut; 
std::string Guess = lOut + ss.str(); 
Смежные вопросы