estructura de acceso desde el mapeo en un contrato diferente

Quiero acceder/modificar datos de un contrato de otro contrato. Si pudieras ayudarme a entender el error, ¡sería genial!

Obtuve el siguiente error:

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){
            ^------^

a continuación se muestra el código:

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;

        }
    }
}   

Respuestas (2)

La estructura de la estructura (...) es interna al contrato compilado y otros contratos no tienen visibilidad en él.

En su lugar, debe tener funciones de acceso y mutación que desempaquetan y devuelven los datos de la estructura por usted. Ver esta respuesta para el ejemplo .

Según tengo entendido, puede acceder a la variable a través de la función. Entonces, para solucionar tu problema tienes que llamar al a.Owners(msg.sender). Pero después tendrás este error:

Error: miembro "sub" no encontrado o no visible después de la búsqueda dependiente del argumento en tupla

ver: estructura de acceso desde otro contrato