这是我的合同代码。在这里,我试图存储特定行程的坐标。同时存储信息合约执行良好。但是,当我检索数据时,它应该给出坐标数组。但这会引发错误。
原因:“ 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:我是新手。
答案 0 :(得分:3)
Solidity不直接支持首先返回结构。相反,您需要返回结构中的每个单独元素,如下所示。
Function xyz(uint256 _value) returns(uint256 User.x, uint256 User.y)
public {}
但是有一个实验功能可以帮助您返回结构。您需要做的就是在第一条实用注释行之后添加以下内容
pragma experimental ABIEncoderV2;
然后继续您的代码。这应该在不更改代码的情况下起作用。
可以在此link
找到abiencoderv2返回结构的示例。答案 1 :(得分:1)
要可靠地返回结构数组是不可能的。