【问题标题】:Appens to array object追加到数组对象
【发布时间】:2018-06-29 23:18:02
【问题描述】:

我在玩 d 并且我卡在 CaStore 类中,它接受 user1 但不接受 user2 数据,我得到 core.exception.RangeError@main.d(60):范围违规,例如添加 @987654321 @ 没有 [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;
}

【问题讨论】:

    标签: d dmd


    【解决方案1】:

    您正在写入数组中超出范围的位置。

    当你声明你的数组时

    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
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多