我正在用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];
看看我是否可以隔离问题,这行编译得很好。
我做错了什么?我担心解决方案在于指针/参考和我对它的理解不足。
答案 0 :(得分:5)
C ++中的数组具有固定大小。没有内置的“动态数组”功能。如果您想要动态数组,请使用std::vector<Account>
。
我正在用C ++编写一个作业,这是一种我并不是特别擅长的语言。
最好尽可能避免new
和显式动态分配。如果您认为需要使用new
动态分配内容并自行管理,那么可能有更好的方法来完成任务。
答案 1 :(得分:0)
当谈到对象时,C ++会让人感到困惑。处理对象时要记住的一件事是,您几乎总是希望它们成为指针,特别是为此目的。这就是new Account
的作用;它返回一个指向帐户的指针,而不是帐户本身。此外,您将希望您的数组是一个单独的指针。因此,你想要做的是做一个双指针。
这实际上非常简单。在实例化对象数组时,您所要做的就是:Account **acounts = new Account*
我创建了一小段示例代码来演示这一点,它允许您在数组中创建任意数量的对象。您可以查看和播放代码here on codepad。