2017-09-26 90 views
3

功能getBets()給我錯誤:error: Failed to decode output: Error: Unsupported or invalid type: tuple。我錯過了什麼?如何返回結構數組?

pragma solidity ^0.4.11; 

contract Casino { 

    struct Bet { 
     address by; 
     uint number; 
    } 

    address owner; 
    Bet[] bets; 

    event BetPlaced(Bet bet); 

    function Casino() { 
     owner = msg.sender; 
    } 

    function bet(uint number) { 
     Bet memory bet; 
     bet.by = msg.sender; 
     bet.number = number; 

     bets.push(bet); 

     BetPlaced(bet); 
    } 

    function getBets() constant returns (Bet[]) { 
     return bets; 
    } 

    function getCount() constant returns (uint length) { 
     return bets.length; 
    } 
} 

回答

0

此刻如果我是正確的,除了整數數組之外不能返回任何東西,因爲不支持返回多維數據存儲;在的地方

pragma experimental ABIEncoderV2; 

您可以通過使用一個實驗庫

pragma solidity ^0.4.11; 

這不適用於混音如果您使用的是,目前,它的實驗所以它可能永遠不會成爲Solidity源的一部分:https://github.com/ethereum/solidity/issues/2948

如果您確實想要返回一個結構數組,您可以將整個數組轉換爲字節並返回字節ES。這將是一個極端的情況,我不會建議。

如果您只需要在內部訪問該方法而不是在外部訪問,則可以通過存儲傳遞,例如,

function getBets() internal returns (Bet[] storage _r) { 
    _v = bets; 
} 
+0

如果不常見返回一個struct數組,我覺得我可能會錯誤地考慮這個問題。我想要做的就是用戶可以將數字添加到列表中,並且我想要顯示所有這些數字以及添加數字的人員。 – kayla

+0

你可以將它構造成一個字符串並返回字符串? –