C ++为地图对象执行但不更改值的函数

时间:2014-11-22 12:08:31

标签: c++ map

我有一个带对象指针的地图(对于多态性),他们使用字符串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;
    }


}

因此,当我运行它时,它肯定有正确的用户选择,它进入功能,它修改了资金价值但是当它退出功能时 - 用户的卡资金不变。

感谢我能得到的任何帮助。

1 个答案:

答案 0 :(得分:2)

此行为的原因似乎是

User::getCard()

我猜测你是按值返回对象

Card User::getCard ()

所以addFunds()将应用于该值而不是原始对象。

确保从getCard().

返回引用
Card& User::getCard()