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);
}
这是一个特殊的问题吗?背后的原理是什么以及如何解决这个问题
请,我被这一天困住了
答案 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。版上编译。
很显然,这是您在函数内部声明了两个未使用的参数的结果。
尽管它在一种情况下却在另一种情况下不会出错,但它似乎仍然是编译器中的错误,至少现在您知道是什么原因造成的。