#c #oop #vector
#c #ооп #вектор
Вопрос:
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
Комментарии:
1. Какой другой метод? Где ваш тестовый код?
2. как вы используете класс????
3. Определение
Account
иmain
функции отсутствуют. Пожалуйста, добавьте их также в вопрос4. В опубликованном вами коде нет ничего плохого. Ошибка в коде, который вы не опубликовали. Вероятно, проблема в том, что ваш код ссылается на два разных
Bank
объекта, когда вы думаете, что существует только одинBank
объект.5. У меня есть класс Account, но я забыл добавить здесь, и здесь в main int main() { string name; cout << «введите свое имя: «; cin >> name; customer cust (имя); Bank bank («BCA»); Учетная запись customerAccount = cust.requestAccount(bank); bank.checkMyAccount(customerAccount); }
Ответ №1:
Итак, проблема в том, что у вас есть два разных объекта банка
Bank bank("BCA");
Account customerAccount = cust.requestAccount(bank);
Account requestAccount(Bank bank){
return bank.registerAccount(name);
}
Объект bank в requestAccount является копией объекта bank в main
. Таким образом, вы добавляете учетную запись к копии, но не к оригиналу в main.
Для решения используйте ссылку
Account requestAccount(Bankamp; bank){
return bank.registerAccount(name);
}
При использовании ссылки Bankamp;
объект bank не копируется, и ваш код изменяет объект Bank в main вместо локальной копии.
По какой-то причине новички часто предполагают, что C по умолчанию передает объекты по ссылке. Но это не тот случай, если вам нужна ссылка, вы должны запросить ее.
Ответ №2:
Ваша проблема здесь:
Account requestAccount(Bank bank) //<--- you are passing by value
{
return bank.registerAccount(name);
}
При вызове requestAccount(bank)
создается копия исходного Bank
объекта:
Account customerAccount = cust.requestAccount(bank);
Чтобы исправить это, измените функцию на:
Account requestAccount(Bankamp; bank) { //pass by reference
...
}
Ответ №3:
Проблема в коде, который вы не показали в сообщении: ваш requestAccount
метод принимает Bank
объект путем копирования, а не по ссылке. Вы должны удалить Bank
конструктор копирования (или сделать его закрытым), чтобы предотвратить повторение подобных вещей.