我真的一直在为一段代码苦苦挣扎几天。我运行代码时收到的错误消息是:
error: array initializer must be an initializer list
accountStore (int size = 0) : accts(size) { }
这里似乎有其他类似问题,但不幸的是我无法应用他们的解决方案(要么不工作,要么不适用)。
我只是尝试做的是创建一个类'prepaidAccount'的容器类(数组,不能使用向量),但我无法让容器类'storeAccount'的构造函数部分工作。请参阅下面的代码段:
class prepaidAccount{
public:
//prepaidAccount ();
prepaidAccount(string newPhoneNum, float newAvailBal) : phoneNumber(newPhoneNum), availableBalance (newAvailBal){} //constructor
double addBalance(double howMuch) {
availableBalance = howMuch + availableBalance;
return availableBalance;
}
double payForCall(int callDuration, double tariff) {
callDuration = callDuration/60; //convert to minutes
double costOfCall = callDuration * tariff;
if (costOfCall > availableBalance) {
return -1;
}
else {
availableBalance = availableBalance - costOfCall;
return costOfCall;
}
}
void setAvailBal(int newAvailBal) {availableBalance = newAvailBal;}
float getAvailBal() {return availableBalance;}
void setPhoneNum(string newPhoneNum) {phoneNumber = newPhoneNum;}
string getPhoneNum() const {return phoneNumber;}
private:
string phoneNumber;
float availableBalance;
};
class accountStore { //made to store 100 prepaid accounts
public:
accountStore (int size = 0) : accts(size) { }
....
private:
prepaidAccount accts[100];
}
主要是我只需拨打accountStore Account;
绝对欢迎任何帮助。我最近开始学习c ++以及类和构造函数,所以请耐心等待。
由于
答案 0 :(得分:1)
您无法使用int
accountStore (int size = 0) : accts(size) {}
初始化数组。
prepaidAccount
没有默认构造函数,你必须编写成员初始化列表,如
accountStore (int size = 0) : accts{prepaidAccount(...), prepaidAccount(...), ...} { }
阵列有100个元素,这里不是一个实用的解决方案。
作为建议,请考虑std::vector
,其constructor构造具有指定值的元素的spicified数。如,
class accountStore {
public:
accountStore (int size = 0) : accts(size, prepaidAccount(...)) { }
....
private:
std::vector<prepaidAccount> accts;
};
答案 1 :(得分:0)
鉴于您已指定您不想使用诸如std :: vector之类的容器但希望在运行时指定大小,您唯一的选择是自己手动实现动态分配。另外,假设您希望一次创建100个对象,我建议创建一个可以根据需要构造临时对象的函数,然后使用它来初始化动态分配的数组。考虑以下代码作为一个很好的起点。 (警告未经测试的代码。)
class prepaidAccount {
public:
// Constructor
prepaidAccount(string newPhoneNum, float newAvailBal)
: phoneNumber(newPhoneNum), availableBalance(newAvailBal) {}
// Default Constructor needed for dynamic allocation.
prepaidAccount() {}
/* your code*/
};
// Used to construct a tempoary prepaid account for copying to the array.
// Could use whatever constructor you see fit.
prepaidAccount MakePrepaidAccount(/*some parameters*/) {
/* Some code to generate account */
return some_var;
}
class accountStore {
public:
// Explicit constructor to avoid implicit type-casts.
explicit accountStore(const int &size = 0)
: accts(new prepaidAccount[size]) {
for (int i = 0; i < size; i++) {
// Will call defualt assignment function.
prepaidAccount[i] = MakePrepaidAccount(/*some parameters*/);
}
}
// Destructor
~accountStore() {
// Cleans up dynamically allocated memory.
delete[] prepaidAccount;
}
prepaidAccount *accts;
};
编辑:在c ++社区中,当有如此优秀且全面的智能指针库时,选择使用动态分配通常会产生疑问。例如,std::vector
在这种情况下是完美的。