簡體   English   中英

如何訪問存儲在 C++ 中的 unordered_map 中的類的方法

[英]How to access methods of classes stored in an unordered_map in C++

因此,我有一個名為 Account 的 class 並將其存儲在 unordered_map 中,但是當我嘗試訪問 map 中的 class 的功能時,它無法編譯。 class 存儲在 header 文件“Bank.h”中

class Account {
double balance;
std::string username;
public:
Account(double balance, std::string username);

double getBal() {
    return this->balance;
}
std::string getName() {
    return this->username;
}
void updateBal(double amount) {
    this->balance += amount;
}
};

這些函數存儲在帶有#include "Bank.h" 的單獨的 cpp 文件中

std::unordered_map<std::string, Account> accountList;
Account test(100, "Tester");
std::cout << test.getBal();
accountList.insert(std::make_pair("Test", test));
accountList["Test"].getName();
accountList["Test"].getName();

無序 map(以及std::map也是)上的[]運算符具有必須滿足的強制性要求:如果映射的鍵不存在,則創建它並默認構造相應的值。

不幸的是,您的Account class 沒有默認構造函數,因此編譯失敗。

確實,就在這行代碼之前,您正在將"Test"的值插入 map,因此它會存在。 不幸的是,這無關緊要。 必須滿足operator[]的所有要求,包括地圖的值要求具有默認構造函數。

您有兩個選項來解決您的編譯錯誤:

  1. 將默認構造函數添加到您的Account class,或

  2. 您不能使用[] ,而是使用at() 或使用find() (並將其結果與end () 進行比較)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM