“从'const char *'无效转换为'char'[-fpermissive]”的问题

时间:2014-02-27 15:23:40

标签: c++

我刚开始学习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行。如果你们看到我犯过的任何错误,请告诉我。谢谢!

2 个答案:

答案 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语句可能应该是比较,这意味着它应该使用比较运算符==