D 附加到数组对象

D 附加到数组对象,d,dmd,D,Dmd,我在玩d,我卡在CaStore类中,它接受user1而不是user2数据,我得到core.exception。RangeError@main.d(60):范围冲突,例如添加db.ccuser[0]=user1不带[0],接下来是db.ccuser[0]=user2不带[0] import std.stdio; class CAdata{ string username;} class Users{ int age; CAdata[] info; this(){

我在玩d,我卡在CaStore类中,它接受user1而不是user2数据,我得到core.exception。RangeError@main.d(60):范围冲突,例如添加
db.ccuser[0]=user1
不带[0],接下来是
db.ccuser[0]=user2不带[0]

import std.stdio;


class CAdata{ string username;}



class Users{

  int age;
  CAdata[] info;



    this(){

      setNull();
    }


    void setNull(){
      age = 0;
      info ~= new CAdata();
    }
}

class CaStore{

    Users[] ccuser;

    this(){
        ccuser ~=  new Users();
    }       
}





void main()
{

    Users user1 = new Users();
    user1.age = 24;
    user1.info[0].username = "bob";

    Users user2 = new Users();
    user2.age = 24;
    user2.info[0].username = "alice";

    CaStore db = new CaStore();
    db.ccuser[0] = user1;
    db.ccuser[1] = user2;
}

您正在写入数组中超出边界的位置

当您声明数组时

Users[] ccuser;
它的长度最初为
0
,没有空间容纳任何元素。然后添加一个元素,得到长度为
1

ccuser ~=  new Users();
这就是为什么第一行

db.ccuser[0] = user1;
工作正常,但第二个会给您一个错误:

db.ccuser[1] = user2;
您正在写入索引
1
,但这已经超过了数组的末尾

您可以:

  • 改为附加到数组:

    db.ccuser ~= user2;
    
  • 或增加阵列的长度以腾出空间:

    db.ccuser.length = 2;
    db.ccuser[1] = user2; // now there is room for two elements, no error