Verschachtelte Strukturen, die Teil einer in Solidity 0.5.0 fehlerhaften Zuordnung sind?

Der folgende Code wurde erfolgreich mit Soldity 0.4.21 kompiliert . Mit 0.5.0 löst es einen schwerwiegenden Kompilierungsfehler wie folgt aus:

UnimplementedFeatureError: Encoding type "struct TestNestedStructInMapping.structNested memory" not yet implemented.
Compilation failed. See above.
Truffle v5.0.0-beta.2 (core: 5.0.0-beta.2)
Solidity v0.5.0 (solc-js)
Node v8.11.1

Hier ist der Code:

pragma solidity ^0.5.0;

contract TestNestedStructInMapping {

    // The struct that is nested.
    struct structNested {
        uint dummy;
    }

    // The struct that holds the nested struct.
    struct structMain {
        structNested gamePaymentsSummary;
    }

    // The map that maps a game ID to a specific game.
    mapping(uint256 => structMain) public s_mapOfNestedStructs;
}

Hier ist ein Link zu einem Truffle-Projekt, das Sie abrufen und testen können:

https://github.com/roschler/nested-structs-tests.git

Weiß jemand wie man das löst?

Antworten (1)

Sie können es lösen, indem Sie das Wort publicaus dem entfernen mapping.

Die Speicherstruktur selbst ist akzeptabel und es kann erwartet werden, dass sie funktioniert. Allerdings ist der "kostenlose" Getter für eine solche Struktur nicht im Compiler implementiert.

Es scheint, Sie haben Recht mit einer Breaking Change, da sie ohne Beanstandung unter 0.4.25 kompiliert wird. Möglicherweise meldet sich eine andere freundliche Seele mit einer genauen Antwort auf die Einschränkung und wohin wir von hier aus gehen. In jedem Fall gehe ich davon aus, dass Sie in der Lage sein sollten, mit Ihren eigenen expliziten Getter-Funktionen fortzufahren.

Ich hoffe es hilft.