Я пытаюсь использовать std::unordered_set
в качестве хеш-таблицы для хранения множества CreditCard
. CreditCard
и другой класс CardDatabase
определяются следующим образом:
class CreditCard {
private:
string cardHolder;
unsigned long long cardNumber;
int limit;
int balance;
public:
CreditCard(string in_cardHolder, string in_cardNumber, int in_limit) {
cardHolder = in_cardHolder;
cardNumber = stoll(in_cardNumber);
limit = in_limit;
balance = 0;
}
void ChangeBalance(int amount) const {
balance += amount; // SECOND ERROR
}
};
class CardDatabase {
private:
unordered_set<CreditCard> cards;
unordered_set<CreditCard>::iterator iter;
public:
CardDatabase() { }
void AddCard(cardHolder, cardNumber, int limit) {
CreditCard tempCard = CreditCard(cardHolder, cardNumber, limit);
cards.insert(tempCard);
}
void Charge(string cardHolder, int chargeAmount) {
iter = cards.find(cardHolder);
iter->ChangeBalance(chargeAmount); // FIRST ERROR
}
}
Первоначально я получал следующую ошибку компиляции в FIRST ERROR
: Member function 'ChangeBalance' not viable: 'this' argument has type 'const CreditCard', but function is not marked const
. Итак, я добавил константу в функцию ChangeBalance
. Однако после этого я получаю следующую ошибку компиляции в SECOND ERROR
: Cannot assign to non-static member within const member function 'ChangeBalance'
.
Есть ли способ исправить эту ошибку, не меняя balance
на статическую переменную? Очевидно, важно, чтобы баланс был разным для каждого экземпляра CreditCard
.
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ:
Спасибо всем за ваши быстрые ответы. Я чувствую, что должен кое-что прояснить. Я уже добавил правильную функциональность хеширования в другом месте моего кода:
namespace std {
template <>
struct hash<CreditCard> {
size_t operator()(const CreditCard& cc) const
{
return hash<string>()(cc.GetCardHolder());
}
}
}
Кроме того, код, который я опубликовал, изначально вставленный, взят из гораздо большей базы кода, и я сначала не удалял все необходимые элементы пространства имен, прежде чем публиковать вопрос. Мои извинения за путаницу.
CreditCard::CreditCard
иCreditCard::ChangeBalance
? - person tkausl   schedule 06.10.2016