【bug解決】TypeError: Data location must be "memory" for parameter in function, but none was given.

問題回顧:在編寫完智能合約之後,通過命令行的形式編譯智能合約時出現的問題。

1. 具體合約代碼(錯誤寫法):

pragma solidity >=0.4.21 <0.7.0;


contract Simple {
  string name;
  uint age;
  
 //定義事件
 event Instructor(string name,uint age);
 function set(string _name, uint _age) public {
    name=_name;
	age=_age;
	//觸發事件
	emit Instructor(name,age);
 }  
 function get() public view returns(string,uint) {
   return (name,age);
 }
  
}

2. 具體問題描述(編譯有問題的代碼已經通過----的形式標註出來了):

3. 問題出現的原因:

這是由於solidity 0.5.0版本的更新導致的,只需要在用到string的時候,在其後面加上memory就可以了。

4. 經過修改後的正確寫法如下:

pragma solidity >=0.4.21 <0.7.0;


contract Simple {
  string name;
  uint age;
  
 //定義事件
 event Instructor(string name,uint age);
 function set(string memory _name, uint _age) public {
    name=_name;
	age=_age;
	//觸發事件
	emit Instructor(name,age);
 }  
 function get() public view returns(string memory,uint) {
   return (name,age);
 }
  
}

注意:string _name修改爲string memory _name

5. 重新編譯一下,就顯示已經編譯成功啦~~

發佈了82 篇原創文章 · 獲贊 51 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章