2

私は特に得意ではない言語である C++ の課題に取り組んでいます。

ファイル main.cpp で「アカウント」オブジェクトの動的配列を宣言しようとしています。

Account * acctArray = new Account[];

main.cpp には Account.h が含まれています。

class Account {
private:
    int customerID;
    int BSB;
    int acctNumber;
    string surname;
    string firstName;
    double balance;
    double withdrawn;
public:
    Account() {};
    //setters
    void setCustID(int ID);
    void setBSB(int inBSB);
    void setAcctNo(int number);
    void setSurname(string sname);
    void setFirstName(string fname);
    void setBalance(double bal);
    void setWithdrawn(double withd);
    //getters
    //(snipped for irrelevance)
    //methods
    bool withdraw(double amount);
};

ただし、Uni の UNIX マシン (割り当てを送信する必要があるマシン) でコンパイルすると、次のエラーが発生します。

"main.cpp"、130 行目: エラー: タイプ "Account[]" が不完全です。

でコンパイルしてみました

Account * acctArray = new Account[5];

問題を特定できるかどうかを確認するために、この行は正常にコンパイルされました。

私は何を間違っていますか?? 解決策はポインター/参照とそれに対する私の理解不足にあるのではないかと心配しています。

4

2 に答える 2

5

C++ の配列は固定サイズです。組み込みの「動的配列」機能はありません。動的配列が必要な場合は、std::vector<Account>.

私は特に得意ではない言語である C++ の課題に取り組んでいます。

new可能な限り、明示的な動的割り当てを避けることが最善です。を使用して何かを動的に割り当てnewて自分で管理する必要があると思われる場合は、おそらくタスクを達成するためのより良い方法があります。

于 2012-08-24T03:34:04.583 に答える
0

C++ は、オブジェクトに関してはやや混乱します。オブジェクトを扱うときに心に留めておくべきことの 1 つは、ほとんどの場合、特にこの目的のために、オブジェクトをポインターにしたいということです。これが何をするかnew Accountです。アカウント自体ではなく、アカウントへのポインタを返します。さらに、配列を別のポインターにする必要があります。したがって、やりたいことはdouble pointerを作成することです。

これは実際には非常に簡単です。オブジェクトの配列をインスタンス化するときは、次のことを行うだけです。Account **acounts = new Account*

これを示す小さなサンプル コードを作成したところ、配列内に任意の数のオブジェクトを作成できます。codepadでコードを表示して操作できます。

于 2012-08-24T03:45:35.250 に答える