我刚开始学习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行。如果你们看到我犯过的任何错误,请告诉我。谢谢!
答案 0 :(得分:2)
在像这样的语句中出现错误
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
标记未找到该字符,所以下一个语句
int temp2 = theWord.find(letterguess);
返回string::npos
您不能将此值用作字符串
theWord[temp2] = letterguess;
此声明之后
int temp3 = gameAlphabet.find(letterguess);
你必须检查temp3是否等于string :: npos。否则代码具有未定义的行为。
答案 1 :(得分:1)
if (gameAlphabet[temp3] = " ")
...
gameAlphabet[temp3] = " ";
...
gameAlphabet[temp1] = " ";
在每种情况下,您都要为字符串" "
中的字符指定一个指针(因为const char*
实际上是gameAlphabet
)。
要解决此问题,请将" "
更改为' '
,这是一个空格字符。
另外,我猜测if
语句可能应该是比较,这意味着它应该使用比较运算符==
。