我一直收到错误“变量'b'正在使用而没有被初始化,我不知道如何解决它

时间:2015-03-01 01:30:47

标签: c++

//Benjamin McKinney
//CSCI 2010-10
//Spring 2015
//PASS 3

//Programmed on Windows 8.1 using Visual C++ 2010 Express

//This program plays the game MasterMind

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>

using namespace std;

struct Player
{
    string Name;
    int HighScores[6];
    bool CheatOn;
};

struct Board
{
    int NumHoles;
    int Holes[6];
};

struct Guess
{
    int Count;
    int NumHoles;
    int Holes;
};

void printHighScores(string);
void readHighScore(string);
void updateHighScore(string, int);
string getPlayer();
int getBoard();
void playGame(string);
void menu(string);

int main()
{
    Player p;
    srand((unsigned int)time(0));

    cout << "!!! Benjamin McKinney's Master-MasterMind!!!\n";
    cout << "--------------------------------------------\n";

    getPlayer();
    menu(p.Name);

    cout << "Goodbye, " << p.Name << endl;
    printHighScores(p.Name);

    cout << "----------------------------------------------\n";
    cout << "!!! Benjamin McKinney's Master-MasterMind!!!\n";

    system("PAUSE");
    return 0;
}

void printHighScores(string name)
{
    return;
}

void readHighScore(string)
{
    return;
}

void updateHighScore(string, int)
{
    return;
}

string getPlayer()
{
    Player p;
    cout << "What is your name?\n";
    cin >> p.Name;
    cout << "Welcome, " << p.Name << endl;
    p.CheatOn = false;
    readHighScore(p.Name);
    return p.Name;
}

int getBoard()
{
    Board b;

    cout << "Enter the number of holes you would like: ";
    cin >> b.NumHoles;

    if(b.NumHoles > 6 || b.NumHoles < 1)
    {   
        cout << "Error! You must pick a number between 1 and 6! Try again!\n";
    }

    for(int i=0;i<b.NumHoles;i++)
    {
        b.Holes[i] = rand() % 2 + 1;
    }

    return b.NumHoles;
}

void playGame(string)
{
    Player p;
    Board b;
    Guess g;
    getBoard();

    g.Count=0;

    for(int i=0;i<b.NumHoles;i++)
    {
        cout << "Enter your guess for the row\n";
        if(p.CheatOn == true)
        {
            for(int a=0;a<(sizeof(b.Holes)-1);a++)
            {
                cout << b.Holes[a];
            }
        }
        cout << "Enter your guess for hole " << i << ": ";
        cin >> g.Holes;
        g.Count++;
    }

    return;
}

void menu(string)
{
    Player p;
    char choice;

    cout << "Please choose an option below:\n";
    cout << "\t P)lay\n\t Q)uit\n\tChoice: ";
    cin >> choice;

    if(choice == 'P')
        playGame(p.Name);
    else
        if(choice == 'Q')
            return;
        else`enter code here`
            if(choice == 'C')
            {
                p.CheatOn = true;
                playGame(p.Name);
            }
}

忽略三个HighScore函数,否则我无法使其工作......“运行时检查失败#3 - 变量'b'正在使用而未被初始化。”是我遇到的主要问题。如果有人可以帮助我,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

playGame函数中:

void playGame(string)
{
    Player p;
    Board b;         // <----- uninitialized
    // ...
    for(int i=0;i<b.NumHoles;i++)
    //            ^^^^^^^^^^

如果您从未初始化b.NumHoles,则使用b

我猜你的意图getBoard()会对b产生一些影响,但事实并非如此。 getBoard函数更新了本地主板但从未对其进行任何操作。

要解决此问题,您可以更改getBoard以返回整个主板:

Board getBoard()
{
    Board b;
    // set up b...
    return b;
}

然后在playGame内:

Board b = getBoard();

下面还有另一个错误:

for(int a=0;a<(sizeof(b.Holes)-1);a++)

sizeof运算符的大小为,以字节为单位。你实际上想要元素的大小,所以你需要除以元素大小:

a < (sizeof b.Holes / sizeof b.Holes[0])

我不确定-1的意图是什么,这只会导致你不输出最后一个洞。