Ich scheine nicht in der Lage zu sein, eine Struktur zu initialisieren, die ein String-Array enthält. Das habe ich versucht:
contract testStruct {
struct stru{
string[] s;
}
stru myStru;
/*
function add(string s) {
string[] strAr; // Uninitialized storage pointer. Did you mean ' memory strAr'?
strAr.push(s);
myStru = stru(strAr);
}
*/
function add(string s) {
string[] memory strAr; // just doesnt do anything, exception?
strAr[0] = s;
myStru = stru(strAr);
}
function getFirst(uint i) constant returns (string s) {
s = myStru.s[0];
}
}
Die erste Version (auskommentiert) gibt mir die Compiler-Warnung und scheint nichts in den Speicher zu schreiben. Der zweite scheint auf eine Ausnahme zu stoßen (das nehme ich an, wenn ich den Gasverbrauch betrachte). Meine Frage lautet also: Wie initialisiere ich eine Struktur, die ein String-Array enthält?
Die andere Antwort, die nicht funktionierte, brachte mich auf den Weg, es selbst herauszufinden:
contract testStruct {
struct stru{
string[] s;
}
stru myStru;
function add(string s) {
myStru.s.push(s);
}
function getAt(uint256 i) constant returns (string s) {
s = myStru.s[i];
}
}
Probieren Sie diesen Ansatz aus. Erstellen Sie die Struktur und fügen Sie sie dann dem Array hinzu:
stru sStruct = stru();
sStruct.s.push('hello');
Wrong argument count for function call: 0 arguments given but expected 1. stru sStruct = stru();
aber du hast mich auf den richtigen Weg gebracht, danke!
Naddison
myStru
Sie müssen die alte Struktur nicht der neuen zuweisensStruct
. Folgendes wird auch funktionierenstru sStruct;
. Oder um es explizit auszudrücken, Sie erstellen eine neue Speichervariable für die Strukturstru storage newStru;
SCBürgel