TypeError:函数中参数的数据位置必须是“内存”,但没有给出
Posted
技术标签:
【中文标题】TypeError:函数中参数的数据位置必须是“内存”,但没有给出【英文标题】:TypeError: Data location must be "memory" for parameter in function, but none was given 【发布时间】:2019-04-26 21:39:08 【问题描述】:我尝试编译我的代码,但出现以下错误:
TypeError:函数中参数的数据位置必须是“内存”, 但没有给出
我的代码:
pragma solidity ^0.5.0;
contract memeRegistry
string url;
string name;
uint timestamp;
function setmeme(string _url,string _name, uint _timestamp) public
url = _url;
name = _name;
timestamp = _timestamp;
【问题讨论】:
【参考方案1】:结构、数组或映射类型的所有变量的显式数据位置现在是强制性的。这也适用于函数参数和返回变量。
在string
之后添加memory
function setmeme(string memory _url, string memory _name, uint _timestamp) public
在此处查看 Solidity 0.5.0。更改https://solidity.readthedocs.io/en/v0.5.0/050-breaking-changes.html
【讨论】:
【参考方案2】://The version I have used is 0.5.2
pragma solidity ^0.5.2;
contract Inbox
string public message;
//**Constructor** must be defined using “constructor” keyword
//**In version 0.5.0 or above** it is **mandatory to use “memory” keyword** so as to
//**explicitly mention the data location**
//you are free to remove the keyword and try for yourself
constructor (string memory initialMessage) public
message=initialMessage;
function setMessage(string memory newMessage)public
message=newMessage;
function getMessage()public view returns(string memory)
return message;
【讨论】:
【参考方案3】:选择其他版本的solidity 编译器。 ^0.4.25
为我工作。
solidity 编译器的版本必须在文件和 remix 的编译选项卡中设置(它是一个下拉菜单)。
【讨论】:
如果我使用不同的编译器,它会给我一个 SyntaxError: Source file requires different compiler version (current compiler is 0.5.0+ 您必须更改文件和混音版本的编译器版本。它是编译选项卡上的下拉菜单。我选择了这个:0.4.25+commit.59dbf8f1
,你的代码没有问题。
对文件和编译器都进行了更改,现在可以正常工作了。【参考方案4】:
它对我有用。
字符串记忆名字【讨论】:
以上是关于TypeError:函数中参数的数据位置必须是“内存”,但没有给出的主要内容,如果未能解决你的问题,请参考以下文章
TypeError('"listener" 参数必须是函数');
类中的函数错误:TypeError:函数()缺少 1 个必需的位置参数:
TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是函数类型。收到未定义