Ich hatte eine Frage. Ich habe eine Zuordnung, die struct zuordnet.
contract A{
struct struct1{
//...members...
}
struct struct2{
struct1 input1;
}
mapping (uint => struct1) mapToStruct;
struct2[] allEntries;
//...rest of the code for populating mapToStruct
}
contract B is A{
function addToStruct2(uint _mappingNumber) returns(bool status){
struct2 memory newMember;
struct1 memory newEntry;
newEntry = mapToStruct[_mappingNumber];
newMember.input1 = newEntry;
allEntries.push(newMember);
return true;
}
}
Aber dieser Code funktioniert nicht, ich kann die Details nicht hinzufügen allEntries
. Das Array hat einen neuen Eintrag, aber alle seine Mitglieder sind 0
, auch wenn addToStruct2
es true zurückgibt. Vielen Dank im Voraus
Ich war ziemlich verwirrt, als ich anfing, dies zu debuggen. Die verschachtelten Strukturen scheinen unnötig beschäftigt zu sein. Ich würde zu einem gut gelösten Muster neigen. Schauen Sie sich hier einige Grundmuster an: Gibt es gut gelöste und einfache Speichermuster für Solidity?
Ich denke, Sie können "Mapping with structs", "array of structs with unique Id" oder sogar "mapping with structs and delete" verwenden - eine Art Schweizer Taschenmessermuster für viele Fälle.
Ich hoffe es hilft.
Aktualisieren
Auf diese Weise können Sie einen Schlüssel und zwei Eingaben senden und die Daten speichern. Sie können eine Schlüsselanzahl erhalten und die Schlüssel nach Nummer abrufen. Sie können die gespeicherten Eingaben mit einem gültigen Schlüssel abrufen. Wenn Sie einen unbekannten Schlüssel abrufen, isSet
ist false.
contract Simple {
struct MyStruct {
uint input1;
uint input2;
bool isSet;
}
mapping(bytes32 => MyStruct) public myStructs;
bytes32[] public keys;
function addToData(bytes32 key, uint input1, uint input2)
public
returns(bool success)
{
myStructs[key].input1 = input1;
myStructs[key].input2 = input2;
myStructs[key].isSet = true;
keys.push(key);
return true;
}
function getKeyCount()
public
constant
returns(uint keyCount)
{
return keys.length;
}
}
11t
struct2 tempStruct = struct2(x,y,z,...);
und dann verwendetallEntries.push(tempStruct);
, aber immer noch kein Fortschritt. Ich verstehe, dass es sehr komplex wird, aber es muss etwas geben, das ich vermisse. btw danke nochmal :)Rob Hitchens
11t