#ethereum #solidity
#ethereum #надежность
Вопрос:
Я пытаюсь добавить кандидата в конструкцию.
contract Election{
struct Candidate {
uint id;
string name;
uint voteCount;
}
mapping(uint => Candidate) public candidates;
uint public candidatesCount;
constructor () public {
addCandidate('Candidate 1');
addCandidate('Candidate 2');
}
function addCandidate(string storage _name) private {
candidatesCount ;
candidates[candidatesCount] = Candidate(candidatesCount,_name,0);
}
}
Ожидается добавление кандидатов 1 и 2.
но столкнулся с этой ошибкой:
Недопустимое неявное преобразование из literal_string «Кандидат 1» в запрошенный указатель хранилища строк.
addCandidate(‘Кандидат 1’);
^————^
Ответ №1:
Вы используете storage
в своем addCandidate
заголовке функции, тогда как они являются memory
переменными. Измените на memory
, и все будет в порядке.
function addCandidate(string memory _name) private
Для получения дополнительной информации о ключевых словах хранилища и memory взгляните сюда. Надеюсь, это избавит вас от проблемы.
Комментарии:
1. Запрашивающий, похоже, следовал этому руководству techgeek628.medium.com / … , и я был пойман в тот же момент. Следует отметить, что здесь вам нужно использовать переменную памяти, потому что вы вызываете
addCandidate
и передаете строку. Это аргумент, переданный через память, не сохраненную в блокчейне. Здесь есть более подробное объяснение: ethereum.stackexchange.com/questions/42715 /…