C ++对象数组 - 类型不完整

时间:2012-08-24 03:32:28

标签: c++ arrays incomplete-type

我正在用C ++编写一个作业,这是一种我并不是特别擅长的语言。

我试图在main.cpp文件中声明一个'Account'对象的动态数组:

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 * acctArray = new Account[5];

看看我是否可以隔离问题,这行编译得很好。

我做错了什么?我担心解决方案在于指针/参考和我对它的理解不足。

2 个答案:

答案 0 :(得分:5)

C ++中的数组具有固定大小。没有内置的“动态数组”功能。如果您想要动态数组,请使用std::vector<Account>

  

我正在用C ++编写一个作业,这是一种我并不是特别擅长的语言。

最好尽可能避免new和显式动态分配。如果您认为需要使用new动态分配内容并自行管理,那么可能有更好的方法来完成任务。

答案 1 :(得分:0)

当谈到对象时,C ++会让人感到困惑。处理对象时要记住的一件事是,您几乎总是希望它们成为指针,特别是为此目的。这就是new Account的作用;它返回一个指向帐户的指针,而不是帐户本身。此外,您将希望您的数组是一个单独的指针。因此,你想要做的是做一个双指针

这实际上非常简单。在实例化对象数组时,您所要做的就是:Account **acounts = new Account*

我创建了一小段示例代码来演示这一点,它允许您在数组中创建任意数量的对象。您可以查看和播放代码here on codepad

相关问题