1

为什么 VS 代码在 Solidity 代码中给我错误,而进来的代码却完美地部署在混音上?

截屏

截屏

这里地址[16] 显示错误。而同样的代码在 remix 上运行。

pragma solidity >=0.4.0 <0.6.0;

contract Adoption {

address[16] public adopters;

function adopt(uint petID) public returns (uint) {
    require(petID >= 0 && petID <= 15);
    adopters[petID] = msg.sender;
    return petID;
    }

function getAdopters() public view returns (address[16]) {
    return adopters;
    }
}
4

2 回答 2

1

错误原因是因为您没有memory像这样为返回类型地址 [16] 提供存储类型: function getAdopters() public view returns (address[16] memory) { return adopters; }

对于您的这个问题“为什么 VS 代码在 Solidity 代码中给我错误,而进来的代码却完美地部署在混音上?

答:确保您已选择0.5.0+commit.1d4f565a.Emscripten.clang或更高的编译器版本来编译 remix ide 中的代码。如果你选择这个版本的编译器,你会得到与 remix ide 中的 VSCode 相同的错误。

于 2018-12-17T05:29:15.577 回答
0

代替require第 8 行,放置if.

也返回truefalse代替 PetId。例如,如果在采用者数组中添加采用者,则返回 true,否则返回 false。

采用函数的正确代码可以是:-

function adopt(unit petID) public returns(bool){
      if(petID>=0&&petID<=15){
          adopters[petID]=msg.sender;
          return true;
       }else{
          return false;
       }
   }

这里如果函数 return true: 在adopters[petID] 中添加新的adopter 成功,否则petID不在0-15 之间,返回false

于 2022-01-09T03:02:54.620 回答