0

この前の質問には、この質問にさらに多くのコードがあります:プライベートベクターへのデータ入力のC ++トラブル(無効な使用)

「アカウント」タイプのベクトルを出力しようとしています

アカウント:

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

これは私がベクトルを宣言している方法です: std::vector<Account> accounts_;

そして、これが私がそれを画面に印刷しようとしている方法です:

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

しかし、「バイナリ式のオペランドが無効です」というエラーが発生します。

現在のコード;

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";
}
}
4

2 に答える 2

2

挿入演算子を提供する必要があります。

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

次に、各フィールドを適切な形式でダンプすることにより、内部的に実装します。

于 2012-08-10T21:17:50.237 に答える
1

クラスをオーバーロードする必要がありoperator <<ます。Accountクラスで:

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

グローバル(またはアカウントが定義されている場合はあなたのもの)名前空間

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

または、たとえばクラスで出力関数を作成します

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

その後free-operator <<

std::ostream& operator << (std::ostream& os, const Account& acc)
{
    acc.print(os);
    return os;
}
于 2012-08-10T21:18:44.503 に答える