功能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 :(得分:0)
目前如果我是正确的,除了整数数组之外你不能返回任何内容,因为不支持返回多维数据存储;
您可以使用以下实验库:
pragma experimental ABIEncoderV2;
取代:
pragma solidity ^0.4.11;
如果您目前正在使用它,并且它是实验性的,那么它在Remix上不可用,因此它可能永远不会成为Solidity源的一部分:https://github.com/ethereum/solidity/issues/2948
如果你确实想要返回一个结构数组,你可以将整个数组转换为字节并返回字节。这有点极端,我不建议。
如果您只需要在内部而非外部访问该方法,则可以通过存储来传递,例如
function getBets() internal returns (Bet[] storage _r) {
_v = bets;
}
答案 1 :(得分:0)
您可能希望将结构切换为另一个合约。这样您就可以返回一组地址。我发现使用结构只对存储和检索“那”数据有用。合同最好返回地址集。另外,我还没有使用过实验编码器,所以只关注当前的可靠性版本。