Zuordnung funktioniert nicht mit Adresstyp

Folgender Code funktioniert, d.h. ich kann aufrufen add(2,3)und gibt dann get(2,0)3 zurück:

pragma solidity ^0.4.10;

contract Bar {
    struct Foo{
        uint x;
    }
    mapping(uint => Foo[]) foo;

    function add(uint id, uint _x) public {
        foo[id].push(Foo(_x));
    }

    function get(uint id, uint index) view public returns(uint){
        return foo[id][index].x;
    }
}

Dieser Code funktioniert nicht, das heißt, ich rufe add(0xB139e6071772FAdC0e1Ad79C63415a2866fD447F,3)auf und gibt dann get(0xB139e6071772FAdC0e1Ad79C63415a2866fD447F,0)zurück 0:

pragma solidity ^0.4.10;

contract Bar {
    struct Foo{
        uint x;
    }
    mapping(address => Foo[]) foo;

    function add(address id, uint _x) public {
        foo[id].push(Foo(_x));
    }

    function get(address id, uint index) view public returns(uint){
        return foo[id][index].x;
    }
}

Der einzige Unterschied besteht darin, dass der uint-Typ an einigen Stellen mit dem Adresstyp vertauscht wurde.

Dieser genaue Code funktioniert gut für mich in Remix. Wenn Sie weiterhin Probleme haben, beschreiben Sie bitte, wie Sie den Vertrag bereitstellen und wie Sie die Funktionen aufrufen. (Code teilen, wenn Sie die Funktionen aus Code aufrufen.)
Wenn Sie Remix verwenden, achten Sie darauf, die Adresse in doppelte Anführungszeichen zu setzen.

Antworten (1)

musste die Adresse in doppelte Anführungszeichen setzen, wenn remix verwendet wurde, wie smarx sagte