gpt4 book ai didi

solidity - 如何可靠地返回地址数组?

转载 作者:行者123 更新时间:2023-12-04 12:08:06 25 4
gpt4 key购买 nike

我正在创建一个可靠的智能合约 ^0.5.1,其中出现错误。

给出错误。

数据位置必须是函数中返回参数的内存,但没有给出。

在下面的函数中,我收到错误。

function getCitizen()public returns(address[]){
return citizenArray;
}

到目前为止我尝试过的智能合约。
  pragma solidity ^0.5.1;

契约公民{
struct Citizens{

uint age;
string fName;
string lName;

}

mapping(address => Citizens) citizenMap;

address [] citizenArray;

function setCitizen(address _address,uint _age,string memory _fName,string memory _lName) public{

//creating the object of the structure in solidity
Citizens storage citizen=citizenMap[_address];


citizen.age=_age;
citizen.fName=_fName;
citizen.lName=_lName;

citizenArray.push(_address) -1;

}

function getCitizen(address _address) public pure returns(uint,string memory ,string memory ){
return(citizenMap[_address].age,citizenMap[_address].fName,citizenMap[_address].lName);

}

function getCitizenAddress()public returns(address[]){
return citizenArray;
}

}

在此先感谢您的帮助。

最佳答案

这是有道理的,因为您正在返回 storage地址数组不能按原样返回,因为它会尝试返回 citizenArray 的实际地址。在合约存储中。您可以通过在 memory 中制作数组来发送数组.像这样。

function getCitizenAddress()public view returns( address  [] memory){
return citizenArray;
}

一旦你把它写成 memory ,你会收到警告,说明你没有改变函数中的任何状态,你应该把它标记为 view ,我已经在上面的代码中做到了。

最后,当你解决这个错误时,你会在这个函数中得到另一个错误:
function getCitizen(address _address) public pure returns(uint,string memory ,string memory ){
return(citizenMap[_address].age,citizenMap[_address].fName,citizenMap[_address].lName);
}

这个错误是因为你将此函数标记为 pure . pure 之间有一点但非常重要的区别。和 view .
  • view意味着您不能在该功能中更改合约的状态。
  • pure意味着您无法更改函数中的状态,甚至无法读取状态或存储变量。

  • 在上述 getCitizen的函数中您实际上是在您的 return 中执行读取操作陈述。您只需输入 view 即可解决此问题而不是 pure .像这样:
    function getCitizen(address _address) public view returns(uint,string memory ,string memory ){
    return(citizenMap[_address].age,citizenMap[_address].fName,citizenMap[_address].lName);

    }

    我希望它能解决你所有的问题。谢谢

    关于solidity - 如何可靠地返回地址数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55345063/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com