繁体   English   中英

C ++错误:数组初始化程序必须是初始化程序列表

[英]c++ error: array initializer must be an initializer list

几天来,我确实一直在努力编写一段代码。 运行代码时收到的错误消息是: 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 ++以及有关类和构造函数的知识,请耐心等待。

谢谢

  1. 您无法使用诸如accountStore (int size = 0) : accts(size) {}类的int初始化数组。

  2. prepaidAccount没有默认的构造函数,您必须编写成员初始化列表,例如

    accountStore (int size = 0) : accts{prepaidAccount(...), prepaidAccount(...), ...} { }

该数组有100个元素,在这里不是实际的解决方案。

作为建议,考虑一下std::vector ,它具有一个构造函数,该构造函数使用指定值的元素的特殊计数构造。 如,

class accountStore {
    public:
        accountStore (int size = 0) : accts(size, prepaidAccount(...)) { }
              ....
    private:
        std::vector<prepaidAccount> accts; 
};

假设您已指定不想使用诸如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将是完美的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM