No puedo agregar elementos a una matriz dentro de struct struct D { string name; clave de dirección; } struct Aone { cadena de ayuda; B[] blíster; D[] dlista; } estructura B{ cadena bdesc; estado booleano; C[] lista; }
struct C{
uint createTime;
string cdesc;
bool rstatus;
string ctype;
}
mapeo(cadena => Auno) A;
Necesito agregar elementos a la estructura c en función de la función de ayuda proporcionada rptC (string _aid, string _c) public { B[] storage bhist = A[_aid].blist;
if(bhist.length > 0 && bhist[bhist.length-1].bstatus==false) {
bhist[bhist.length-1].clist.push(C(now,_c,false,""));
} else if(bhist[bhist.length-1].bstatus==true) {
bhist[bhist.length].clist.push(C(now,_c,false,""));
} else {
bhist[0].clist.push(C(now,_c,false,""));
}
}
Sigo recibiendo un error json rpc no válido. Soy nuevo en Solidity y necesito ayuda
Gracias
clist.push(c(now,_problem,false,"")
Estás presionando una estructura ac (¿no debería ser una C?) con 4 campos, pero la estructura tiene solo 3 campos.
Esto es difícil de responder con esta breve parte de su código fuente, pero ¿está seguro de que la bhist
estructura ya existe antes de agregar el clist
?
Creo que encontré el problema:
B[] storage bhist = A[_aid].blist
Estás usando A tiene un mapeo, no tiene una estructura.
Hice algunos cambios y ahora el siguiente código funciona en la remezcla:
pragma solidity ^0.4.23;
contract Test {
mapping ( string => B[] ) A;
struct B {
string bdesc;
bool bstatus;
C[] clist;
}
struct C {
uint createTime;
string cdesc;
bool rstatus;
string ctype;
}
function rptC(string _aid, string _c) public {
B[] storage bhist = A[_aid];
if(bhist.length > 0 && bhist[bhist.length-1].bstatus==false) {
bhist[bhist.length-1].clist.push(C(now,_c,false,""));
} else if(bhist[bhist.length-1].bstatus==true) {
bhist[bhist.length].clist.push(C(now,_c,false,""));
} else {
bhist[0].clist.push(C(now,_c,false,""));
}
}
}
¿Esto ayuda?
usuario1351757