TypeError:返回参数类型元组(int_const 23,bool,uint8[3]内存)不能转换为预期类型元组(



//当我编译和部署下面的代码时。没有错误

// SPDX-License-Identifier: MIT 
pragma solidity ^0.8.0; 
contract MultipleValues{
function returnValues() public pure returns (uint, bool, uint8[3] memory) {
return (23, true, [1,2,3]);
}
}

//但是当我将值从uint8[3]更改为int[3]时,它会抛出错误

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MultipleValues{function returnValues() public pure returns (uint, bool, uint[3] memory) {
return (23, true, [1,2,3]);
}
}
//how to resolve this issue?
//Unexpected behaviour of array in solidity when returning a fixed size array

应该可以:

contract MultipleValues{
function returnValues() public pure returns (uint, bool, uint[3] memory) {
uint[3] memory memoryArray;
memoryArray[0]=1;
memoryArray[1]=2;
memoryArray[2]=3;
return (23, true, memoryArray);
}

固度的uint类型为uint8,uint16,uint24,.....,uint256。最小的是uint8,当编译器看到"[1,2,3]"它推断出最小的单位类型是uint8。实际上"[1,2,3]";可以是uint8,uint16,uint24,.....,uint256

我所做的是,明确地告诉编译器我正在创建&;int[3]&;然后返回。

最新更新