С++ Выполнение функции для объекта карты, но не изменение значения
1 user3665874 [2014-11-22 15:08:00]
У меня есть карта с указателями на объекты (для полиморфизма) они используют идентификатор строки как свой ключ. Каждый из этих объектов содержит объект внутри них, когда я пытаюсь изменить значение содержащегося объекта, функция работает, но как только она покидает функцию, значение не изменяется. Я думал, что это может быть связано с тем, что итератор или метод 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() << " 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 << " card";
cout << "\nFunds remaining for " << userID << ": $" << it->second->
getCard().getFunds();
}
else
{
displayMenu();
}
}
else
{
cout << "\nSorry, this user does not exist";
displayMenu();
}
}
Метод addFunds() внутри объекта Card
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;
}
}
Поэтому, когда я запускаю это, он определенно имеет нужный Пользователь, он входит в функцию, он изменяет стоимость средств, но по мере выхода из функции - средства пользовательской карты не изменяются.
Цените любую помощь, которую я могу получить.
c++ map
1 ответ
2 Решение ravi [2014-11-22 15:24:00]
Причина такого поведения кажется
User::getCard()
Мое предположение заключается в том, что вы возвращаете объект по значению
Card User::getCard ()
поэтому addFunds()
будет применяться к этому значению, а не к исходному объекту.
Убедитесь, что вы вернули ссылку из getCard().
Card& User::getCard()