double checkBankBalance()
{
double bankBalance;
for (auto &item : users)
{
for (auto &item : users[item].Accounts)
{
bankBalance = bankBalance + item->balance;
}
}
return 0;
}
- Вы не инициировали "bankBalance",
- Вы не вернулись (или использование) bankBalance,
- При добавлении переменной-члена, "bankBalance" к вашему structs, он не будет виден внутри этой функции.
- Вы не освоили объявление типа объявления vs member в C++.
"typedef" определяет тип. Таким образом, вам не нужно это infront «struct» или «class», и вы определенно не хотите его при объявлении переменных.
Для вашего собственного здравомыслия, подумайте о том, чтобы сделать имена переменных-членов отличными от других переменных, а имена класса/структуры различны.Общей практикой является использование «m_» в качестве префикса для «члена», верхнего верблюда для классов, «s_» для статики, «g_» для глобалей.
struct Account /* Capitalize struct/class names */
{
string m_transactionLog;
float m_balance;
string *m_pOwner; // I've got a bad feeling about this.
int m_accountNumber;
string m_label;
};
Решение будет происходить с вами, как вы реализуете следующее:
typedef struct User /* capitalize class names */
{
string m_testUsername;
//...
user(const string& username, const string& password, const string& customerName, bool isCustomer, bool isTelelr, bool isManager)
: m_testUsername(username), m_testPassword(password)
, m_customerName(customerName /* ouch, this was broken before*/)
, isCustomer(isCustomer)
, isTeller(isTeller)
, isManager(isManager)
{}
...
// Look ma: a type definition
//typedef vector<pAccount> Accounts;
// Well, ma, we actually wanted a member, not a type.
vector<pAccount> m_accounts; // Ok, pointers to accounts, I have a bad feeling again.
};
Теперь checkBankBalance становится довольно интуитивно.
double checkBankBalance()
{
double bankBalance = 0; // local and farm bought.
for (auto &user: g_users) // everything in users.
{
// now we want to iterate over the accounts member of the user.
// which will be 'm_accounts'. Since it's a pointer, don't use &
for (auto item : user.m_accounts)
{
bankBalance = bankBalance + item->balance;
}
}
/// do something with bankBalance here
/// ...
///
return 0;
}
Зачем хранить указатели в векторах? Вы просто выбросили RAII из окна ... – Borgleader