【问题标题】:Compiler won't let me instantiate struct编译器不允许我实例化结构
【发布时间】:2021-04-21 20:44:00
【问题描述】:

通常在声明函数时会出现此错误,并通过在参数旁边添加“内存”而消失,但这次我无法解决它。我正在尝试实例化一个接受两个参数的结构:

struct Obj {
    string where;
    uint what;
    }


function do() public {
    Obj obj=Obj("here",1);
    }

带有新 Obj 触发器的行:TypeError: Data location must be "storage", "memory" or "calldata" for variable, but none was given.

我尝试在第一个参数之后、第二个参数之后、两个参数之后、函数之后等到处都放置“内存”。似乎没有任何东西可以安抚编译器。


我正在使用pragma solidity ^0.8.0;

【问题讨论】:

  • obj(变量)在哪里定义?
  • 你可能会得到更好的答案here
  • @CherryDT 函数 do() 创建上面 4 行字面上定义的类型的变量
  • 我只看到struct的定义和变量的赋值,没有看到变量的定义。我问的原因是因为需要设置数据位置(存储/内存)there
  • 我更新了代码以包含变量前面的声明。

标签: ethereum solidity smartcontracts web3


【解决方案1】:

首先你需要定义数据类型(Obj),然后是位置(memorystorage),然后是变量名(obj)。

function foo() public {
    Obj memory obj = Obj("here", 1);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-26
    • 2014-04-21
    相关资源
    最近更新 更多