Ошибка типа: расположение данных должно быть «memory» или «calldata» для параметра в функции, но ни один из них не был указан

#solidity

#солидность

Вопрос:

Я пытаюсь выполнить следующий код, но получил эту ошибку.

Если я добавлю память внутри параметров функций, я получу новую ошибку:

Ошибка типа: местоположение данных может быть указано только для типов array, struct или mapping, но было задано «memory».

 pragma solidity 0.8.7;

 mapping (string => uint) wallet;

function saveWalletData(uint _qty , string _name) public{
    wallet[_name] = _qty;
}

function consultarWallet(string _name) public view returns(uint){
    return wallet[_name];
}
 

Ответ №1:

string является ссылочным типом в Solidity. Для всех ссылочных типов вам необходимо указать их местоположение данных (docs).

В этом случае вы можете использовать calldata для обоих, потому что вы не изменяете значение _name переменной.

 function saveWalletData(uint _qty , string calldata _name) public{
    wallet[_name] = _qty;
}

function consultarWallet(string calldata _name) public view returns(uint){
    return wallet[_name];
}
 

Если вы хотите изменить значение в памяти, вам нужно использовать memory .