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;
}
}
}
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