D 附加到数组对象
我在玩d,我卡在CaStore类中,它接受user1而不是user2数据,我得到core.exception。RangeError@main.d(60):范围冲突,例如添加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(){
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