Обзор: я пытаюсь создать программу банковского счета, которая имеет несколько классов (4, если быть точным). Вот иерархия —
Банка
Учетные записи;
учетная запись
Вкладчик depositor_info;
Int Account_number;
Double account_balance;
вкладчик
Имя depositor_name;
строка Номер социального страхования;
название
Строка первая, последняя;
Я могу установить имя вкладчика, а затем назначить вкладчика на счет. Однако я не могу распечатать имя вкладчика. Вот основной код тестирования:
Account test[MAX_ACCTS];
string first = "john", last = "doe", social = "132456789";
int acctNumber = 987654;
Name name;
Depositor depositor;
name.setFirst(first); // works
name.setLast(last); // works
depositor.setName(name); // this works
depositor.setSSN(social); // this works
test[1].setDepositor(depositor); // this also works.
cout << test[1].getDepositor(); // Here I get an error:
no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Depositor')
Что я делаю неправильно?
Вам нужно определить кастом operator<<
перегрузка для std::ostream&
а также Depositor const&
в качестве аргументов. C ++ не знает, как конвертировать ваши объекты в текст.
std::ostream & operator<<(std::ostream & out, Depositor const& depositor) {
out << depositor.getName().getLast() << ", " << depositor.getName().getFirst();
out << "; " << depositor.getSSN();
return out;
}
Очевидно, что вы можете настроить конкретное поведение, если просто печатать имя + SSN не желаемое поведение.
Других решений пока нет …