追加到数组对象

Appens to array object

我在玩 d,我卡在 CaStore class,它接受 user1 但不接受 user2 数据,我得到 core.exception.RangeError@main.d(60): Range违规,例如添加不带 [0] 的 db.ccuser[0] = user1;,然后添加不带 [0]

db.ccuser[0] = user2;
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,但已超出数组末尾。

您可以:

  1. 改为附加到数组:

    db.ccuser ~= user2;
    
  2. 或者增加数组的长度腾出空间:

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