不稳定的混音编译器错误“编译期间未知异常”

时间:2019-01-04 06:55:35

标签: compiler-errors ethereum compiler-warnings solidity remix

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 :(得分: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。版上编译。

很显然,这是您在函数内部声明了两个未使用的参数的结果。

尽管它在一种情况下却在另一种情况下不会出错,但它似乎仍然是编译器中的错误,至少现在您知道是什么原因造成的。