Solidity

從不同合約中的映射訪問結構

  • January 7, 2017

我想訪問/修改來自另一個契約的契約的數據。如果您能幫助我理解錯誤,那就太好了!

我收到以下錯誤:

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

下面是程式碼:

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;

       }
   }
}   

結構結構 (…) 是已編譯合約的內部結構,其他合約在其中不可見。

相反,您需要有一個訪問器和修改器函式來為您解包並返回結構數據。有關範例,請參見此答案

據我了解,您可以通過函式訪問變數。因此,要解決您的問題,您必須致電a.Owners(msg.sender). 但是之後會出現這個錯誤:

錯誤:在元組中進行參數相關查找後,成員“子”未找到或不可見

請參閱:從其他合約訪問結構

引用自:https://ethereum.stackexchange.com/questions/11152