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:必须使用关键字参数作为键函数

TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是函数类型。收到未定义

TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“DataFrame”

TypeError:func()缺少1个必需的位置参数:从discord.py中的不同文件夹导入函数时为'self'