我有一个带对象指针的地图(对于多态性),他们使用字符串ID作为键。这些对象中的每一个都包含一个对象,当我尝试修改所包含对象的值时,该函数可以正常工作但是一旦它离开函数,该值就不会改变。我认为它可能与迭代器或get方法保持不变,但我已经改变了它并仍然遇到同样的问题。
void System::addUserFunds()
{
string userID;
float fundsToAdd;
cout << "Which ID: ";
cin >> userID;
cin.ignore();
if (userFound(userID))
{
map<string, User*>::iterator it = UsersMap.find(userID); //
cout << "How much do you want to add to " <<
it->second->getUserID() << "'s card: $";
cin >> fundsToAdd;
cin.ignore();
cout << "\nCurrent funds user is : $" << it->second->getCard()().getFunds();
if (it->second->getCard().addFunds(fundsToAdd) == true)
{
cout << "\nAdded $" << fundsToAdd << " to " << userID << "'s card";
cout << "\nFunds remaining for " << userID << ": $" << it->second->
getCard().getFunds();
}
else
{
displayMenu();
}
}
else
{
cout << "\nSorry, this user does not exist";
displayMenu();
}
}
Card对象中的addFunds()方法是
bool Card::addFunds(float extraFunds)
{
if ((int)extraFunds % 5 == 0)
{
if ((funds + extraFunds) <= Card::getMaxLimit())
{
cout << "\nEntering addFunds function";
funds += extraFunds;
cout << "\n Funds are now: $" << funds;
displayFunds();
return true;
}
else
{
cout << "\nSorry, max funds allowed is $100.00\n";
return false;
}
}
else
{
cout << "\nSorry, you can only add in multiples of $5.00\n";
return false;
}
}
因此,当我运行它时,它肯定有正确的用户选择,它进入功能,它修改了资金价值但是当它退出功能时 - 用户的卡资金不变。
感谢我能得到的任何帮助。
答案 0 :(得分:2)
此行为的原因似乎是
User::getCard()
我猜测你是按值返回对象
Card User::getCard ()
所以addFunds()
将应用于该值而不是原始对象。
确保从getCard().
Card& User::getCard()