追加到数组对象
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
,但已超出数组末尾。
您可以:
改为附加到数组:
db.ccuser ~= user2;
或者增加数组的长度腾出空间:
db.ccuser.length = 2;
db.ccuser[1] = user2; // now there is room for two elements, no error
我在玩 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
,但已超出数组末尾。
您可以:
改为附加到数组:
db.ccuser ~= user2;
或者增加数组的长度腾出空间:
db.ccuser.length = 2; db.ccuser[1] = user2; // now there is room for two elements, no error