Нестабильная ошибка компилятора ремикса "Неизвестное исключение во время компиляции" - PullRequest
0 голосов
/ 04 января 2019

Онлайн-компилятор 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);
}

Это особая проблема? В чем заключается принцип и как ее решить

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

enter image description here

enter image description here

1 Ответ

0 голосов
/ 05 января 2019

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

    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 параметра, которые вы не используете внутри своей функции.

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

...