Нестабильная ошибка компилятора ремикса "Неизвестное исключение во время компиляции"

Онлайн-компилятор Remix выдает нестабильное сообщение об ошибке между одинаковыми кодами и похожим сценарием.

Remix продолжает выдавать "Неизвестное исключение во время компиляции". когда функция выполняет несколько динамических возвратов (три динамических массива uint[]).

Но когда я оценил возврат к двум динамическим массивам, проблема исчезла. И теперь я понятия не имею о причине этого. Имейте переключение другой версии солидности прагмы уже.

// Remix генерирует Неизвестное исключение во время компиляции.

function Determine_Result(uint GameId, uint RoundId) internal returns (uint[] memory WinnerUserId, uint[] memory DrawUserId, uint[] memory LoserUserId) {

    uint[] memory Im_WinnerUserIdSet;
    uint[] memory Im_DrawIdSet;
    uint[] memory Im_LoserIdSet;

    /*
    ...        
    */

    return (Im_WinnerUserIdSet, Im_DrawIdSet, Im_LoserIdSet);
}

// Тем не менее, это работает!?:(

function Determine_Result(uint GameId, uint RoundId) internal returns (uint[] memory WinnerUserId, uint[] memory DrawUserId) {

    uint[] memory Im_WinnerUserIdSet;
    uint[] memory Im_DrawIdSet;
    uint[] memory Im_LoserIdSet;

    /*
    ...        
    */       
    return (Im_WinnerUserIdSet, Im_DrawIdSet);
}

Это особая проблема? Какой принцип лежит в основе и как это решить

Пожалуйста, я пойман в ловушку на этот день

1 ответ

Редактирование вашей функции следующим образом исправило ошибку, которую вы получаете для меня.

    pragma solidity >=0.4.22 <0.6.0;

contract Test {
    function Determine_Result() public pure returns (uint[] memory WinnerUserId, uint[] memory DrawUserId, uint[] memory LoserUserId) {

        uint[] memory Im_WinnerUserIdSet;
        uint[] memory Im_DrawIdSet;
        uint[] memory Im_LoserIdSet;

        /*
        ...        
        */

        return (Im_WinnerUserIdSet, Im_DrawIdSet, Im_LoserIdSet);
    }

}

Кажется, ваша проблема как-то связана с версией компилятора. Код, который я написал, компилируется в версии 0.5.2. Код, который вы написали, компилируется в версии 0.4.22, но не в 0.5.2.

Насколько я понимаю, это результат того, что вы объявили 2 параметра, которые вы не используете внутри своей функции.

Это по-прежнему похоже на ошибку в компиляторе, хотя он ошибается в одном сценарии, но не в другом, по крайней мере, теперь вы знаете, что его вызывает.

Другие вопросы по тегам