0

There is more code to this question in this previous question: C++ Trouble Inputting Data into Private Vector (invalid use)

I'm trying to output a vector of type "Account"

Account:

class Account { string firstName; string lastName; string accountPass; int accountID; float accountBalance; private: int depositAmount; int withdrawAmount; public: static Account createAccount( int, float, string, string, string ); //creates new account void deposit( int ); //deposits money into account void withdraw(int); //withdrawals money from account int retdeposit() const; //function to return balance amount friend class BankingSystem; }; //end of class Account 

This is the way I'm declaring the vector: std::vector<Account> accounts_;

And here's how I'm trying to print it to the screen:

for(int i=0; i < accounts_.size(); i++) { cout<< accounts_[i] <<endl; } 

But I'm getting this error "invalid operands to binary expression".

Current code;

class BankingSystem { int accountID; char fileName; private: std::vector<Account> accounts_; public: void addAccount(); void storeAccount( Account ); void deleteAccount(); void accountInquiry(); void saveAccounts(); void loadAccountsFromFile(); friend class Account; friend std::ostream& operator << (std::ostream&, const Account&); }; // end of class BankingSystem #endif std::ostream& operator << (std::ostream& os, const Account& acc) { // output members to os return os; } void BankingSystem::addAccount() { int ID; float balance; std::string pass, first, last; cout << "\n\t Enter the Account ID: "; cin >> ID; cout << "\n\t Enter the passcode: "; cin >> pass; cout << "\n\t Enter Client's first name: "; cin >> first; cout << "\n\t Enter Client's last name: "; cin >> last; cout << "\n\t Enter starting balance: "; cin >> setw(6) >> balance; storeAccount( Account::createAccount( ID, balance, pass, first, last ) ); return; } //function gets data from createAccount void BankingSystem::storeAccount( Account newAccountToAdd ) { //append to vector "accounts_" accounts_.push_back(newAccountToAdd); } void BankingSystem::deleteAccount() { cout << "\nEnter The Account ID: "; cin >> accountID; } void BankingSystem::accountInquiry() { int n; cout << "\n\t Enter The Account ID (-1 for all): "; cin >> n; //cout << accounts_.size(); if (n == -1) { cout << "\n\t List of all Accounts; (" << accounts_.size() << ") TOTAL: "; for(int i=0; i < accounts_.size(); i++) { cout<< accounts_[i] << endl; } } else { cout << "\n\t Listing Account: " << n; cout << "\n\t I should search the vector for the ID you input"; } } 

2 Answers 2

2

You need to provide the insertion operator:

std::ostream& operator<<( std::ostream& out, const Account& acct ); 

Then implement it internally by dumping each one of the fields with the appropriate format.

Sign up to request clarification or add additional context in comments.

Comments

1

You should overload operator << for Account class. In class:

friend std::ostream& operator << (std::ostream&, const Account&); 

In global (or yours, where Account is defined) namespace

std::ostream& operator << (std::ostream& os, const Account& acc) { // output members to os return os; } 

or create some output function in class for example

void print(std::ostream& os) const { } 

And then free-operator <<

std::ostream& operator << (std::ostream& os, const Account& acc) { acc.print(os); return os; } 

18 Comments

Ok, your suggestion fixed the error but it's not outputting anything. Does my for loop really iterate through the entire vector and print out each element?
@frankV: Did you add any code to dump the contents of the Account object inside operator<<? You need to do it.
@frankV: See that comment // output members to os. That's exactly what you didn't do. You've defined an operator<< that does nothing, so not surprisingly when you use it you see nothing.
Second point, you need to add accessor methods to Account, so you can get the values you need. For instance class Account { private: int accountID; public: int getAccountID() const { return accountID; } }; Then you use that accessor method to get the value of the account ID from the acc variable. So os << acc.getAccountID();. Would recommend you get a book on C++, this stuff would be explained in any decent book.
The other way to do it is to add an all in one print method to Account, you then call the print method from the operator<< function. This is what David suggested.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.