У меня есть такой код, и я хочу установить свое имя, фамилию и возраст в своей структуре, поэтому я хочу установить их и использовать с моими функциями.
вот мой код:
pragma solidity >=0.4.0 <0.7.0;
contract NewHello{
address owner;
constructor()public{
owner = msg.sender;
}
modifier onlyOwner (){
require(msg.sender == owner);
_;
}
struct user{
string name;
string surname;
uint age;
}
user[] new_user;
mapping(address => string) public users; // contains a name for every address
function updateUser(address _address, string memory name,string memory surname,uint age) public onlyOwner {
user memory new_user = user(name,surname,age);
users[_address] = user(name,surname,age);
}
function getUser(address _address) public view returns(string memory name ,string memory surname,uint age) {
//if(users[_address].age == 0) throw;
return (users[_address].name,users[_address].surname,users[_address].age);
}
}
Я получаю 2 ошибки, первая из них:
TypeError: Type struct NewHello.user memory is
not implicitly convertible to expected type string storage ref.
users[_address] = user(name,surname,age);
^--------------------^
TypeError: Member "name" not found
or not visible after argument-dependent lookup in string storage ref.
кто-нибудь может мне помочь, пожалуйста?
Используйте отображение, например:
mapping(address => user) public users
Каждый адрес будет иметь пользователя. Вы можете улучшить это, если вы используете msg.sender вместо адреса (параметр функции), потому что вам не нужно указывать адрес, и каждый пользователь может изменить свои данные и увидеть их ( onlyOwner
в этом случае вам нужно удалить модификатор) .
pragma solidity >=0.4.0 <0.7.0;
contract NewHello{
address owner;
constructor()public{
owner = msg.sender;
}
modifier onlyOwner (){
require(msg.sender == owner);
_;
}
struct user{
string name;
string surname;
uint age;
}
mapping(address => user) public users; // contains a user for every address
function updateUser(address _address, string memory name, string memory surname, uint age) public onlyOwner {
users[_address] = user(name, surname, age);
}
function getUser(address _address) public view returns(string memory name, string memory surname, uint age) {
//if(users[_address].age == 0) throw;
return (users[_address].name, users[_address].surname, users[_address].age);
}
}
Альберто
mapping(address => user) public users
?Фуркан Демирель