Übergeben eines Arrays von Bytes32 [] mit fester Größe zwischen zwei Verträgen [Duplikat]

Ich verwende zwei Verträge, bei denen einer eine Funktion des anderen aufruft:

contract con1 {
    bytes32[5] data;

    function con1(){
    }

    function addData(bytes32[5] a) { //fills the array
    }   

    function getData() public constant returns(bytes32[5]){  //retrieve array
        return (data);
    }
}

Der nächste Kontrakt ruft getDataden obigen Kontrakt auf, nachdem er ausgefüllt wurde mit addData:

contract con2 {
    function con2(){
    }

    function try(address con1Contract){
        con1 b = con1(con1Contract);
        bytes32[5] y = b.getData();
    }
  ....
}

Da wir in Solidity keine Arrays mit dynamischer Größe übergeben können, habe ich die Größe des Arrays festgelegt. Allerdings bekomme ich immer noch folgenden Fehler:

TypeError: Type bytes32[5] memory is not implicitly convertible to expected type bytes32[5] storage pointer.
bytes32[5] y = b.getData();

Was mache ich falsch?

Gibt es auch einen effizienteren Weg, dies zu tun?

Meine Frage ist kein Duplikat. Die andere Frage versucht, den Rückruf in einem Array mit dynamischer Größe zu erhalten.
Es ist. Das gleiche Problem tritt auf und eine Antwort wird in diesem Beitrag gegeben.

Antworten (1)

Versuchen Sie, Ihr "y"-Array zum Eigentum des Vertrags zu machen

 contract con1 {
    bytes32[5] data;

    function con1(){
    }

    function addData(bytes32[5] a) { //fills the array
    }   

    function getData() public constant returns(bytes32[5]){  //retrieve array
        return (data);
    }
}

contract con2 {
    bytes32[5] y;
    function con2(){
    }

    function trys(address con1Contract){
        con1 b = con1(con1Contract);
         y = b.getData();
    }
}

Für mich geht das.