我知道内存和呼叫数据之间有什么区别。但看到我问了这个问题,我似乎还不太明白。
当我使用“calldata”作为构造函数输入参数的数据位置时,我遇到了如下错误消息。
"Data location must be "storage" or "memory" for constructor parameter, but "calldata" was given."但是,在构造函数中,我只读取要分配存储的值,而不做任何更改。
就像下面的例子
pragma solidity 0.8.10;
contract Example {
address theFirst;
constructor(address[] calldata _addressList) {
theFirst = _addressList[0];
}
}发布于 2022-08-17 14:43:06
这是因为构造函数是一种特殊的函数,它是如何被调用的。
契约被写入链表,后面紧跟构造函数参数数据。然后,构造函数通过查找参数值的偏移量来读取参数值。
因此,构造函数参数不是calldata类型的。
https://ethereum.stackexchange.com/questions/125100
复制相似问题