牢固地返回结构数组

时间:2018-12-22 12:10:35

标签: ethereum solidity smartcontracts

这是我的合同代码。在这里,我试图存储特定行程的坐标。同时存储信息合约执行良好。但是,当我检索数据时,它应该给出坐标数组。但这会引发错误。

  

原因:“ uint256类型的数据不足”

contract TripHistory {
       struct Trip {
           string lat;
           string lon;
       }
        mapping(string => Trip[]) trips;

        function getTrip(string _trip_id) public view returns (Trip[]) {
            return trips[_trip_id];
        }
        function storeTrip(string _trip_id, string _lat, string _lon) public  {
           trips[_trip_id].push(Trip(_lat, _lon));
        }

}

我在这里想念的东西。还有其他方法可以实现我在这里尝试的功能吗?

P.S:我是新手。

2 个答案:

答案 0 :(得分:3)

Solidity不直接支持首先返回结构。相反,您需要返回结构中的每个单独元素,如下所示。

Function xyz(uint256 _value) returns(uint256 User.x, uint256 User.y)
public {}

但是有一个实验功能可以帮助您返回结构。您需要做的就是在第一条实用注释行之后添加以下内容

pragma experimental ABIEncoderV2;

然后继续您的代码。这应该在不更改代码的情况下起作用。

可以在此link

找到abiencoderv2返回结构的示例。

答案 1 :(得分:1)

要可靠地返回结构数组是不可能的。