类getter函数C++的奇怪输出

Weird output with class getter function C++

本文关键字:输出 C++ getter 函数      更新时间:2023-10-16

所以我有一段飞镖游戏的代码,在我的头文件中:

    class Player
    {
    private:
        string playerName;
        int bullAccuracy;
        int outerAccuracy;
        int singleAccuracy;
    public:
        //getters
        string& getName();
        int& getBullAccuracy();
        int& getSingleAccuracy();
        //setters
        void setName(string& name);
        void setBullAccuracy(int& bull_accuracy);
        void setSingleAccuracy(int& single_accuracy);
    };

然后.cpp文件中对应的getter和setter函数如下所示:

    //getters
    string& Player::getName()
    {
        return playerName;
    }
    unsigned int& Player::getScore()
    {
        return playerScore;
    }
    int& Player::getBullAccuracy()
    {
        return bullAccuracy;
    }
    int& Player::getSingleAccuracy() 
    {
        return singleAccuracy;
    }
//setters
void Player::setName(string& name)
{
    playerName = name;
}
void Player::setBullAccuracy(int& bull_accuracy)
{
    bullAccuracy = bull_accuracy;
}
void Player::setSingleAccuracy(int& single_accuracy)
{
    singleAccuracy = single_accuracy;
}

所有这些非常简单和基本的getter/setter代码用于类数据memebers,对吧?

不过,在main()函数中,我为我的玩家设置了名称,以及它们的各种精度,然后通过getter显示它们。所有这些都是使用对象向量和迭代器完成的,比如:

vector<Player> player(2);
vector<Player>::iterator modIter;
int bAccuracy, sAccuracy;
string playerName;
cout << "Input the name of the players: " << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
    cin >> playerName;
    modIter->setName(playerName);
}
cout << "nSet the players' bull accuracy:" << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
    cout << modIter->getName() << ": ";
    cin >> bAccuracy;
    modIter->setBullAccuracy(bAccuracy);
}
cout << "nSet the players' single hit accuracy: " << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
    cout << modIter->getName() << ": ";
    cin >> sAccuracy;
    modIter->setBullAccuracy(sAccuracy);
}
//display values to check program working well so far
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
    cout << modIter->getBullAccuracy() << endl;
    cout << modIter->getOuterAccuracy() << endl;
    cout << modIter->getSingleAccuracy() << endl;
}

运行代码后,输入"Joe"answers"Sid"作为名称,分别输入71和73作为公牛准确度,然后输入80作为两名玩家的单次命中准确度,这就是我的控制台输出:

输入玩家名称:

Joe

Sid

设置玩家的公牛精度:

乔:71

Sid:73//这意味着至少名称设置正确

设置玩家的单次命中精度:

乔:80

Sid:80

//这是奇怪的输出

80//这应该是71

-842150451//和这个80

80//这里是73

-842150451//这里又是80

到底发生了什么,因为这是getter和setter的基本和熟悉的用法,我不知道如何自己调试,因为我没有看到这个问题。我的代码中是否有我看不到的东西正在改变结果?

提前非常感谢您的帮助

当您提示单精度时,您仍然在调用setBullAccuracy方法,而不是setSingleAccuracy。您也没有初始化您的成员变量,这就是为什么打印出singleAccuracy会给您带来垃圾的原因。