0

クラス「アカウント」のベクトルがあります。これは、クラスBankingSystemのプライベートです。これが私がそれらを定義する方法です。

アカウントクラス:

struct newAccount
{
string firstName;
string lastName;
string accountPass;
int accountID;
float accountBalance;

}; //end of structure newAccount

class Account
{
    string firstName;
    string lastName;
    string accountPass;
    int accountID;
    float accountBalance;

private:
    int depositAmount;
    int withdrawAmount;

public:
    static newAccount 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

BankingSystemクラス:

class BankingSystem
{
    int accountID;
    char fileName;

private:
    std::vector<Account> accounts_;

public:
    static void addAccount();
    static void storeAccount( newAccount );
    void deleteAccount();
    void accountInquiry();
    void saveAccounts();
    void loadAccountsFromFile();
    friend class Account;

}; // end of class BankingSystem

この方法で、ベクターに新しいアカウントを保存しようとしています。

1)BankingSystem.hのaddAccount関数

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;

}

2)Account.hのcreateAccount

newAccount Account::createAccount( int ID, float balance, string first, string last, string pass )
{    
newAccount a;
a.accountID = ID;
a.accountBalance = balance;
a.firstName = first;
a.lastName = last;
a.accountPass = pass;

return a;

}

3)BankingSystem.hのstoreAccount

void BankingSystem::storeAccount( newAccount a )
{
accounts_.push_back(a);

}

ベクトルにデータを格納することを除いて、すべてが正常に機能しています。行accounts_.push_back(a);にこのエラーがあります。「静的メンバー関数でのメンバー'accounts_'の使用が無効です。」

4

3 に答える 3

3

this静的メソッドはクラス インスタンス ( no )にアクセスできないためstoreAccountaddAccountメンバーaccounts_は存在しません。

参考までに: return ステートメントの後には何も実行されないため、cout << "\n\t Account ID: " << a.accountID << " added successfully.";現在のコードではこの行は役に立ちません。

参考までに、次の実装を検討してください。

using namespace std;

class Account
{
private: // data members
    string firstName;
    string lastName;
    string accountPass;
    int accountID;
    float accountBalance;

public:
    // constructor that initializes members
    Account(int id, float bal, const string& fname, const string& lname, const string& pass)
        : accountID(id), accountBalance(bal), firstName(fname), lastName(lname), accountPass(pass) {}

}; //end of class Account

class BankingSystem
{
private: // data members
    int accountID;
    char fileName;
    vector<Account> accounts_;

public:
    void addAccount()
    {
        int ID;
        float balance;
        string pass, first, last;

        // prompt input, initialize values, etc

            // construct a new Account from values and add it to vector
        accounts_.push_back(Account(ID, balance, first, last, pass));
    }
    void storeAccount( const Account& newAccount )
    {
            // add an already initialized account
        accounts_.push_back(newAccount);
    }


}; // end of class BankingSystem
于 2012-08-10T20:11:23.870 に答える
0

静的メンバー関数には、 のようなメンバー変数への特別なアクセス権はありませんaccounts_

addAccountstoreAccountは静的メンバー関数です。何らかの理由でそれらを作成したに違いありませんが、それは間違いでした。その静的を削除すると、このエラーが削除されます。その後、別の問題が発生すると思います。その場合は、別の質問をして、それを解決する正しい方法を見つけてください。

于 2012-08-10T20:13:46.587 に答える
0

このメソッドは静的であるため、「this」ポインターがないため、accounts_ 変数にアクセスするオブジェクトがわかりません。また、return 呼び出しの後であるため、createAccount() でその出力が表示されることはありません。

于 2012-08-10T20:14:06.837 に答える