为什么这一行给我一个c2120错误

时间:2015-05-07 22:31:02

标签: c++ compiler-errors

} while (mf_bingo(c) != 5);

这是我不断收到错误的行。我尝试在mf_bingo(c)之前放置一个空格并取出(c)

编辑: 这是完整的循环

do

    {
        char yesNo;
        int c, d;
        if (yesNo == 'y' || yesNo == 'Y')
        {
            cout << "Player 1 how many numbers are on your card" << endl;
            cin >> c;
            mf_bingo(c);
        }

        else if (yesNo == 'n' || yesNo == 'N')
        {
            cout << "Sorry player 1" << endl;
        }
        cout << "Player 2 do you see this number on your card." << endl;
        cin >> yesNo;
        if (yesNo == 'y' || yesNo == 'Y')
        {
            cout << "Player 2 how many numbers are on your card" << endl;
            cin >> c;
            mf_bingo(c);
        }

        else if (yesNo == 'n' || yesNo == 'N')
        {
            cout << "Sorry player 2" << endl;
        }
        cout << "Press 1 to continue generating random numbers." << endl;
        cin >> d;
        mf_numbers(d);
    } while (mf_bingo(c) != 5);

这里是mf_numbers

void mf_numbers(int d)
{
    int xRan;
    srand(time(0));
    xRan = rand() % 50 + 1;
    cout << xRan << endl;

}

这是mf_bingo

void mf_bingo(int c)
{
    if (c == 0)
        cout << "You need to match get 5 more matching numbers to win." << endl;
    else if (c == 1)
    {
        cout << "You only need 4 more matching numbers to win" << endl;
    }
    else if (c == 2)
    {
        cout << "You only need 3 more numbers to win" << endl;
    }
    else if (c == 3)
    {
        cout << "You only need 2 more numbers to win" << endl;
    }
    else if (c == 4)
    {
        cout << "You only need 1 more number to win" << endl;
    }
    else if (c == 5)
    {
        cout << "You win!!!" << endl;
    }
}

4 个答案:

答案 0 :(得分:5)

问题是声明void mf_bingo()。你必须使这个函数返回int

您可以使用以下代码重现此问题:

void mf_bingo(int c) {  // void doesn't return anything
}

int main() {
    do { } while(mf_bingo(c) != 5);
}

错误C2120解释说,当函数返回void时,即没有任何内容,您无法将其与整数进行比较。通常情况下,intellisence应该已经将mf_bingo强调为潜在错误,并提供更准确的描述。

您可以轻松纠正此问题:

int mf_bingo(int c) {  // here we return something 
    ...   // same logic as before 
    return c; 
}

答案 1 :(得分:3)

Compiler Error C2120表示您使用void类型,您应该使用其他类型(在您的情况下:int)。

您需要更改:

void mf_bingo(int c)

为:

int mf_bingo(int c)

并适当地更改函数的主体,以便它返回int,使您提到的行:} while (mf_bingo(c) != 5);按预期工作。

答案 2 :(得分:3)

mf_bingo会返回void,您无法将其与任何内容进行比较。您需要mf_bingo来返回可以比较的类型(在您的示例中,它需要与5相当)。根据玩家是否获胜,你可以让它返回truefalse

bool mf_bingo(int c)
{
    if (c == 0)
    {
        cout << ...
        // no win:
        return false;
    }
    etc...
    else if (c == 5)
    {
        cout << "you win!";
        return true;
    }
    // no match:
    return false;
}

答案 3 :(得分:2)

mf_bingo返回类型为void(即它不返回任何内容),您在while循环中处理它,就像它返回一个整数值一样。

要解决此问题,您可以将该功能的签名更改为int mf_bingo(int c),然后它就可以返回c。由于mf_bingo实际上没有改变c,所以这似乎有点无意义。

因此,您已经在循环终止条件中检查了值c

你可以这样做

do
{
   // other code

   // just print stuff
   mf_bingo(c);

} while(c < 5);

同时注意

您还应该面对另一个问题,即在c循环中定义do while。这也可能无法编译,可能无法正常运行。

e.g。

int main()
{
    do
    {
        int c = 1;
        c++;        
    }
    while (c < 5);

    return 0;
}

如果这个编译(它不应该),你就会有一个无限循环,因为c永远不会达到5.在循环之外移动c。一切都好。

int main()
{
    int c = 1;
    do
    {
        c++;        
    }
    while (c < 5);

    return 0;
}