c++ - 推送一些数据后,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
解决方案
所以问题是你有两个不同的银行对象
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++ 默认通过引用传递对象。但事实并非如此,如果你想要参考,你必须要求它。
推荐阅读
- python - 拆分列时如何跳过 NaN 值
- curl - Curl 命令错误:返回类似于 javascript 的内容
- reactjs - useState 不会异步工作(React)
- c++ - 确定最大利润算法 C++
- node.js - 如何使用 Google Drive V3 创建文件夹?
- reactjs - 为什么我的 React 应用程序不能使用我的 Apache .htaccess 文件来防止 404?
- google-cloud-data-fusion - 访问 BigQuery 时出错 [无法获取有关 BigQuery 表的详细信息:BigQuery 的访问被拒绝]
- google-cloud-platform - Google Cloud Storage 中的 daisy-bkt 存储桶是什么?
- apache-spark - pyspark中的动态字典
- python-3.x - 使用 TensorFlow matmul 时出现意外结果,dtype=tf.float32