Contract-Design

簡單契約的問題

  • April 3, 2021

我是一個新的學習者。

我的簡單契約無法在 remix 中編譯,我不知道如何修復第 18 行中的錯誤(uploadStudent 的聲明)。錯誤是“可以為數組、結構或映射類型指定數據位置,但給出了‘記憶體’。”

我可以請你幫忙嗎?

pragma solidity ^0.6.0;

contract simple {
 mapping(uint => studentFile) public studentfiles;

 uint studentCount;
 
 struct studentFile {
   uint studentId;
   string studentName;
   uint age;
 }

 constructor() public {
     studentCount=0;
 }

 function uploadStudent(string memory _studentName, uint memory _age) public {

   // Increment student id
   studentCount ++;

   // Add File to the contract
   studentfiles(studentCount) = studentFile(studentCount, _studentName, _age);
 }
}

您不能為數字類型指定數據位置。只需替換此位:

uint memory _age

uint _age

這行:

studentfiles(studentCount) = studentFile(studentCount, _studentName, _age);

studentfiles[studentCount] = studentFile(studentCount, _studentName, _age);

你的契約將被編譯。正如錯誤所述,您只能為數組、結構或映射類型指定記憶體位置。在 Solidity 中,字元串本質上是字節數組,這就是為什麼你可以為_studentName.

您可以在此處閱讀 Solidity 文件中有關數據位置的更多資訊。

引用自:https://ethereum.stackexchange.com/questions/96630