Werte eines Byte-Arrays dynamisch setzen

Wenn ich die Werte eines Arrays wie folgt setze, liege ich falsch?

uint256 n = 0;
bytes32[n] example;

function getArraySize(uint256 arraySize) public returns(uint256 size) {

 size = arraySize;
 return size;

}

n = getArraySize(3);
example[n] = [bytes32("value_1"),bytes32("value_2"),bytes32("value_3")];

Ich bekomme " parser error: expected identifier" für, n = getArraySize(3);aber ich weiß nicht, was falsch ist?

Hinweis : Diese Frage bezieht sich auf eine andere Frage (den Link unten), in deren Antwort in Hinweis Nummer 2 erwähnt wird, dass es im Falle der Definition eines Arrays mit dynamischer Größe nicht möglich ist, Werte dieses Arrays wie folgt festzulegen:

newObject(100, 3, [bytes32("location"),bytes32("price"),bytes32("sold")], [bytes32("Paris"),bytes32("50"),bytes32("yes")], address(0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773);

Link zu verwandter Frage: Fehlercodierungsargument (Remix)

Warum versuchst du nicht, das zu kompilieren und zu sehen, was passiert?
@goodvibration Ich bekomme "Parser-Fehler: erwartete Kennung" für n = getArraySize (3); aber ich weiß nicht woran es liegt?

Antworten (1)

Ihr Code hat viele Probleme. Zunächst einmal würde die Art und Weise, wie Sie die Größe des Arrays zuweisen, zu 0 führen, da ndie Arraygröße bei Beginn mit 0 0 wäre. Stattdessen bytes32[] example;würde es ausreichen, ein dynamisches Array zu erstellen. Das nächste Problem ist, dass Sie versuchen, n = getArraySize(3); example[n] = [bytes32("value_1"),bytes32("value_2"),bytes32("value_3")];außerhalb einer Funktion zu verwenden, was mit solidity nicht möglich ist. Um dies zu beheben, müssen Sie den Code mit einer Funktion umschließen. Anschließend können Sie mit example.push("value_1");ect in das Array einfügen. was die Verwendung von getArraySize und n irrelevant macht.

Vielen Dank, aber laut Antwort unten können wir anscheinend in Solidität keine Werte eines Arrays wie "[bytes32("value_1"),bytes32("value_2"),bytes32("value_3")] setzen;" Falls die Array-Größe dynamisch definiert wird, haben Sie eine Lösung für dieses Problem? Danke ethereum.stackexchange.com/questions/47538/…
Ich habe dir buchstäblich gesagt, benutzeexample.push("value_1"); example.push("value_2"); example.push("value_3");
Bitte sehen Sie sich meine fragliche Funktion newObject an, deren Link ich in meinem vorherigen Kommentar erwähnt habe. Mein Problem ist, wie man Werte von Parametern von bytes32 [] sub_states_types und bytes32 [] sub_states_values ​​zum Zeitpunkt des Aufrufs von "function newObject" setzt. Haben Sie eine Lösung zum Aufrufen dieser Funktion, da ihre Parameter ein Array sind. Danke noch einmal.
Sie können nicht auf eine andere Frage zu dieser Frage verweisen, um auch eine Antwort darauf zu erhalten. Wenn dies die Lösung für diese Frage ist, können Sie sie als erledigt markieren, und dann kann ich mir vielleicht Ihre andere Frage ansehen. Diese Fragen beziehen sich nicht aufeinander.
Ich habe in meiner Frage. Wenn ich etwas anderes tun muss, lassen Sie es mich bitte wissen. Danke