这是我的合约代码。在这里,我试图存储特定行程的坐标。虽然存储信息合约执行良好。但是当我检索数据时,它应该给出坐标数组。但它抛出了一个错误。
原因:'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));
}
}
我在这里错过了什么。有没有其他方法来实现我在这里尝试的?
附言:我是固体新手。
就像jlo在这个链接里说的,0.8.0版本以后,可以返回一个struct。jlo描述了如何设置和返回struct数组的元素。这里我描述了如何设置、重置和返回一个struct类型变量。
我测试了它,我的测试环境是:
请注意,您必须首先在协定内的任何函数外部定义结构类型。
超级直观的示例代码如下:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract testContract {
struct funcResultType {
uint[] var1;
string[] var2;
string message;
}
funcResultType private funcResult;
function testSetFunc(string memory inputVar) public payable {
funcResult.var1.push(123);
funcResult.var2.push(inputVar);
funcResult.message = "Done!";
}
function testResetFunc() public payable {
delete funcResult; // reset variales
}
function testGetFunc() public view returns (funcResultType memory){
return funcResult;
}
}
在控制台中使用Web3js进行测试的结果如下:
如您所见,整个变量都是可访问的。我在此链接中将其web3js代码上传到Github中。
在solidity中不可能返回结构数组。
Solidity不直接支持第一个返回结构。相反,您需要返回结构中的每个单独的元素,如下所示。
Function xyz(uint256 _value) returns(uint256 User.x, uint256 User.y)
public {}
但是,还有一个实验性功能可以帮助您返回结构。您需要做的就是在第一个编译指示行之后添加以下内容
pragma experimental ABIEncoderV2;
然后继续您的代码。这应该不会对代码进行任何更改。
abiencoderv2返回结构的示例可以在以下链接中找到:
问题内容: 以下是gcc 4.4.4下的简单代码段错误 将最后一行更改为 工作良好。使用编译时,这两个版本均可使用。我是在简单地调用未定义的行为,还是在标准中进行了某些更改,从而使代码可以在C99下工作?为什么在C89下崩溃? 问题答案: 我相信C89 / C90和C99中的行为均未定义。 是数组类型的表达式,特别是。 C99 6.3.2.1p3说: 除非它是 sizeof 运算符或一元 & 运算
我开始在JPA2.1中使用新的实体图特性来指定必须加载的惰性集合。考虑以下课程: 当我执行命名查询以获得实体图提示下的实体列表时,我会得到一个包含重复实体的集合。如何仅加载一次A实体。 我正在使用: 冬眠4.3.5
问题内容: 对于以下C代码: 对于Win32,我得到以下反汇编: 对于Linux32: 我试图了解呼叫后呼叫者的行为方式的差异。为什么Linux32中的调用程序会执行这些额外的操作? 我假设两个目标都将遵循cdecl调用约定。cdecl不会为返回结构的函数定义调用约定吗? 编辑: 我添加了被调用者的实现。可以肯定的是,您可以看到Linux32被调用方会弹出其参数,而Win32被调用方不会: Win
我正在读clean architecture的书,我想把它应用到我写的一些软件中。在该软件中,和等实体扮演着非常重要的角色。出于这个原因,为了避免重复,跨代码共享这些实体是有意义的,但这也违反了清洁体系结构的规则。 在这种情况下,什么是正确的决定?我应该在中添加一个“shared/entities”文件夹吗? 我正在做的项目主要是在flutter编程,如果这对答案很重要的话。
问题内容: 我有一个看起来像这样的JSON Blob 我有一些代码将其转换回go结构 但是我在运行时看到的只是一个零位结构 我尝试先分配该结构,但那也没有用,我不确定为什么它不产生值,并且不返回错误 问题答案: 您的结构字段不会导出。这是因为它们以小写字母开头。 当我说“未导出”时,是指它们在您的包装之外不可见。您的软件包可以愉快地访问它们,因为它们在本地作用域内。 至于包装-它看不到它们。您需要
jna 中 structure 结构体怎么读取, 在回调函数中 我收到对方返回一个 pointer 是海康的sdk NET_DVR_SetDVRMessageCallBack_v50 的回调函数 有个 pAlarmInfo:Pointer 类型, 想接收为 NET_DVR_ACS_ALARM_INFO 类型, 要怎么做 我试过这样读取, 但没有讲到到