类getter函数C++的奇怪输出
Weird output with class getter function C++
所以我有一段飞镖游戏的代码,在我的头文件中:
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
会给您带来垃圾的原因。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词