我使用的是这个版本的solid,pragma solidity >=0.4.22 <0.9.0;
当我编译truffle时,我得到这个TypeError: Member "length"
。当我将版本更改为0.4.0
时,错误消失了,但我不能使用这个版本。我需要使用这个pragma solidity >=0.4.22 <0.9.0;
错误如下:
TypeError: Member "length" is read-only and cannot be used to resize arrays.
--> project:/contracts/Ballot1.sol:23:9:
|
23 | proposals.length = _numProposal;
| ^^^^^^^^^^^^^^^^
Compilation failed. See above.
从Solidity v0.6.0起,你可以使用像proposals[start:end]
这样的数组切片(注意:它只支持calldata数组)
否则,我认为你可能需要像这样创建一个数组的副本:
function slice(
uint256 start,
uint256 end,
uint256[] memory proposals
) public pure returns (uint256[] memory) {
uint256[] memory result;
uint256 idx = 0;
for (uint256 i = start; i < end; i++) {
result[idx] = proposals[i];
idx++;
}
return result;
}
注意,如果你有一个大数组,这个操作可能会非常昂贵。