Zugriffsstruktur aus der Zuordnung in einem anderen Vertrag

Ich möchte Daten aus einem Vertrag aus einem anderen Vertrag abrufen / ändern. Wenn Sie mir helfen könnten, den Fehler zu verstehen, wäre das großartig!

Ich bekomme folgenden Fehler:

Untitled1:33:8: Error: Indexed expression has to be a type, mapping or array >(is function (address) constant external returns (bool,address,uint256,bool))
        if (a.Owners[msg.sender].sub = false){
            ^------^

unten ist der code:

pragma solidity ^0.4.7;

contract abc{
    struct Owner{
        bool exist;
        address owner;
        uint share;
        bool sub;
    } // un owner as son address et son percent d'ownership

    mapping (address => Owner) public Owners;
    uint public no_owners; 
    uint public no_sub;


    function abc(){ // a l'execution, l'ownership est transferer a l'excecuteur avec 100 shares.
        //initate
    }

    function transfer(address to,uint amount){
        //transfer ownership
    }
}

contract cde{
    mapping (uint => abc) all_cde;
    uint public f;


    function ask_subdivise(abc a){
        //les different owners vont devoir lancer la fonction
        // une fois que tout les owners on lancer la fonction, le lot est diviser.
        if (a.Owners[msg.sender].sub = false){
            a.Owners[msg.sender].sub=true;
            a.no_sub+=1;

        }
    }
}   

Antworten (2)

Die Strukturstruktur (...) ist intern für den kompilierten Vertrag und andere Verträge sind darin nicht sichtbar.

Stattdessen benötigen Sie einen Accessor und Mutatorfunktionen, die die Strukturdaten für Sie entpacken und zurückgeben. Siehe diese Antwort für das Beispiel .

Soweit ich weiß, können Sie über die Funktion auf die Variable zugreifen. Um Ihr Problem zu lösen, müssen Sie also anrufen a.Owners(msg.sender). Aber nachdem Sie diesen Fehler haben werden:

Fehler: Element „sub“ nicht gefunden oder nach argumentabhängiger Suche im Tupel nicht sichtbar

siehe: Zugriffsstruktur aus anderem Vertrag