С++ Выполнение функции для объекта карты, но не изменение значения

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()