[英]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;
}
所有用於類數據成員的非常簡單且基本的獲取/設置代碼,對嗎?
不過,在main()函數中,我設置了球員的姓名,他們的各種准確性,然后在吸氣劑中顯示他們。 所有這些都是使用對象和迭代器的向量完成的,如下所示:
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”和“ Sid”作為名稱,分別為71和73表示公牛精度,然后為兩個玩家輸入80的單次命中精度,這就是我的控制台輸出的內容:
輸入玩家名稱:
喬
席德
設置玩家的公牛准確性:
喬71
Sid:73 //這意味着至少名稱設置正確
設置玩家的單次命中精度:
喬:80
席德:80
//這是奇怪的輸出
80 //應該是71
-842150451 //和這80
80 //這里73
-842150451 //這里又是80
所以發生了什么事,因為這實際上是對getter和setter的基本和熟悉的使用,而且我不知道如何自己調試它,因為我看不到問題。 我的代碼中有什么我看不到的東西正在改變結果嗎?
預先非常感謝您的幫助
當提示輸入單精度時,您仍在調用setBullAccuracy
方法,而不是setSingleAccuracy
。 您也沒有初始化成員變量,這就是為什么打印出singleAccuracy
會給您帶來垃圾的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.