我正在尝试创建一个结构体,并以这样一种方式添加映射,它可以在以后使用下面的代码使用其地址检索。
pragma solidity ^0.8.0;
contract Courses {
struct Instructor {
uint age;
string fName;
string lName;
}
mapping (address => Instructor) instructors;
address[] public instructorAccts;
function setInstructor(address _address, uint _age, string _fName, string _lName) public {
var instructor = instructors[_address]; //ERROR HERE
instructor.age = _age;
instructor.fName = _fName;
instructor.lName = _lName;
instructorAccts.push(_address) -1;
}
}
然而,我在var instructor = instructors[_address]
行得到一个错误错误是ParserError: Expected primary expression
我无法理解问题是什么以及如何解决它。有人能帮忙吗?
Solidity使用类型化变量,没有通用的var
关键字(例如在JavaScript中使用)。
在声明引用类型(在您的示例中为string
和struct
)时,您需要指定它们的数据位置—在您的示例中为字符串参数memory
。结构体的memory
或storage
取决于你是想在setInstructor()
函数(位置memory
)的上下文中设置值,还是想在合约存储(位置storage
)中设置值。
function setInstructor(address _address, uint _age, string memory _fName, string memory _lName) public {
// either `memory` or `storage` depending on your use case
Instructor storage instructor = instructors[_address];
// ... rest of your code
这一行也有语法错误
instructorAccts.push(_address) -1;
你可以通过删除-1
来修复它。instructorAccts.push(_address);