Я только начал изучать c++, и у меня возникла проблема с "неверным преобразованием из" const char * "в" char "[-fpermissive]" в моем исходном коде.
const string alphabet = "abcdefghijklmnopqrstuvwxyz";
string gameAlphabet = alphabet;
char letterguess;
int limbnumber = 0;
do
{
cout << "Please choose a letter: ";
cin >> letterguess;
cout << letterguess;
if (theWord.find(letterguess) == string::npos)
{
int temp2 = theWord.find(letterguess);
theWord[temp2] = letterguess;
int temp3 = gameAlphabet.find(letterguess);
if (gameAlphabet[temp3] = " ")
{
cout << "You have already guessed this letter, please try again.";
}
gameAlphabet[temp3] = " ";
cout << gameAlphabet;
}
else
{
limbnumber++;
int temp1 = gameAlphabet.find(letterguess);
gameAlphabet[temp1] = " ";
if (limbnumber == 7 )
{
cout << "\n\nSorry " << playername << ", you lose.";
cout << "Please try again.";
}
}
"Неверное преобразование из" const char * "в" char "[-fpermissive]" встречается в строках 19, 23 и 30. Если вы, ребята, видите ошибки, которые я сделал, сообщите мне. Благодарю!
Ошибка возникает в таких выражениях, как это
gameAlphabet[temp3] = " ";
" "
является строковым литералом, который в выражениях преобразуется в указатель на первый символ литерала. Вместо строкового литерала вы должны использовать объект типа char. Например
gameAlphabet[temp3] = ' ';
Вместо двойных кавычек вам нужно использовать одинарные кавычки. Хотя вы можете написать, используя строковый литерал, следующим образом
gameAlphabet[temp3] = " "[0];
Но этот код только путает пользователей.
Также учтите, что ваша программа недействительна. Например, рассмотрим этот фрагмент кода
if (theWord.find(letterguess) == string::npos)
{
int temp2 = theWord.find(letterguess);
theWord[temp2] = letterguess;
Условие theWord.find(letterguess) == string::npos
meabs, что символ не найден, Итак, следующее утверждение
int temp2 = theWord.find(letterguess);
возвращает string::npos
Вы не можете использовать это значение как индекс в строке
theWord[temp2] = letterguess;
Также после этого утверждения
int temp3 = gameAlphabet.find(letterguess);
вы должны проверить, равно ли temp3 string: npos. В противном случае код имеет неопределенное поведение.
if (gameAlphabet[temp3] = " ")
...
gameAlphabet[temp3] = " ";
...
gameAlphabet[temp1] = " ";
В каждом из этих случаев вы назначаете указатель (потому что " "
на самом деле является символом const char*
) для символа в вашей строке gameAlphabet
.
Чтобы исправить это, измените значение " "
на ' '
которое является одиночным символом пробела.
Кроме того, я предполагаю, что утверждение if
вероятно, должно было быть сопоставлением, а это означает, что он должен использовать оператор сравнения ==
.
""
- это const char[1]
.
gameAlphabet[temp3]
нужен персонаж. Вы не можете поместить несколько символов в один.if (gameAlphabet[temp3] = " ")
вероятно, не делает то, что вы хотите.