Appens to array object - PullRequest
       29

Appens to array object

0 голосов
/ 30 июня 2018

Я играл с 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;
}

1 Ответ

0 голосов
/ 30 июня 2018

Вы пишете в позицию в массиве, которая находится за пределами.

Когда вы объявляете свой массив

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
    
...