首页 > 解决方案 > 编译器不允许我实例化结构

问题描述

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

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;

标签: ethereumsoliditysmartcontractsweb3

解决方案


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

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

推荐阅读