首页 > 解决方案 > 推送一些数据后,C++ Vector 在实例类中变为空

问题描述

class Bank {
  private:
   string bankName;
   vector<Account> accounts;

  public:
   Bank(string name){
    bankName = name;
   }
   Account registerAccount(string name){
    Account account(name, rand());
    accounts.push_back(account);

    return account;
   }
  void checkMyAccount(Account account){
    cout << accounts.size();
    cout << bankName;
    for(Account acc : accounts){
      if(acc.getBankId() == account.getBankId()){
        cout << acc.getName();
      }
    }
  }
};

我是 C++ 新手,你知道为什么在另一种方法中我的向量在推送一些数据后变为空吗?这是完整的代码https://repl.it/@mufti1/CircularFrontSigns

标签: c++oopvector

解决方案


所以问题是你有两个不同的银行对象

Bank bank("BCA");
Account customerAccount = cust.requestAccount(bank);

Account requestAccount(Bank bank){
  return bank.registerAccount(name);
}

requestAccount 中的银行对象是中银行对象的副本main。因此,您在副本中添加了一个帐户,而不是在 main 中的原件中添加了一个帐户。

解决使用参考

Account requestAccount(Bank& bank){
  return bank.registerAccount(name);
}

通过使用引用Bank&,不会复制 bank 对象,并且您的代码会更改 main 中的 Bank 对象而不是本地副本。

出于某种原因,初学者通常认为 C++ 默认通过引用传递对象。但事实并非如此,如果你想要参考,你必须要求它。


推荐阅读