Недопустимое неявное преобразование из literal_string в запрошенный указатель хранилища строк

#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 /…