Solidity: Initialisiert eine Struktur, die ein String-Array enthält

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?

Antworten (2)

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];
    }
}
myStruSie müssen die alte Struktur nicht der neuen zuweisen sStruct. Folgendes wird auch funktionieren stru sStruct;. Oder um es explizit auszudrücken, Sie erstellen eine neue Speichervariable für die Strukturstru storage newStru;
danke @naddison Ich habe die Antwort verbessert und gekürzt.

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');
Das kompiliert leider nicht: 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!