Расположение данных должно быть «памятью» для возвращаемого параметра в функции, но ни один не был задан - PullRequest
0 голосов
/ 06 октября 2019

Я попробовал пример солидности, как указано выше в ремиксе, версия солидности> 0.5.0 Но сейчас я получаю эту ошибку. Как решить эту ошибку?

contract MyContract {
    string value;

    function get() public view returns (string) {
        return value;
    }

    function set(string _value) public {
        value = _value;
    }

    constructor() public {
        value = "myValue";
    }
}

1 Ответ

4 голосов
/ 07 октября 2019

Вы должны добавить ключевое слово памяти для строкового параметра, который был введен в версии Solidness 0.5.0

Согласно документации:

Явное расположение данных для всех переменных структуры,Типы массива или отображения теперь обязательны. Это также применяется к параметрам функции и возвращаемым переменным. Например, измените uint [] x = m_x на uint [] storage x = m_x, а функцию f (uint [] [] x) на функцию f (uint [] [] memory x), где memory - это местоположение данных и можетбыть заменены хранилищем или calldata соответственно. Обратите внимание, что для внешних функций требуются параметры с местоположением данных calldata.

Исправленный код

contract MyContract {
    string value;

    function get() public view returns (string memory) {
        return value;
    }

    function set(string memory _value) public {
        value = _value;
    }

    constructor() public {
        value = "myValue";
    }
}

См. Официальную документацию о критических изменениях, внесенных в версии 0.50,0

...