6

在 Solidity 中,您可以使用array.length++增加数组的大小以为新成员腾出空间。但我收到一个错误:

Value must be an lvalue
4

2 回答 2

8

您可以使用“arrayname.length = ;”调整存储中的动态数组(即在合约级别声明的数组)的大小 但是如果你得到“左值”错误,你可能做错了两件事之一。您可能正在尝试调整内存中的数组大小,或者您可能正在尝试调整非动态数组的大小。

int8[] memory somearray;     // CASE 1
somearray.length++;          // illegal 

int8[5] somearray;           // CASE 2
somearray.length++;          // illegal 

重要说明:在 Solidity 中,数组的声明方式与您可能习惯于声明它们的方式相反。如果你有一个 >=2D 数组,其中包含一些动态和一些非动态组件,你可能会违反 #2 并且不明白为什么。另请注意,以“正常”方式访问数组。以下是这种“向后”声明范式的一些示例:

int8[][5] somearray;  // This is 5 dyn arrays, NOT a dyn array-of-arrays w/len=5
// so...
somearray[4];         // the last dynamic array
somearray[1][12];     // the 13th element of the second dynamic array
// thus...
somearray.length++;   // illegal. This array has length 5. Always.
somearray[0].length++;// legal
于 2015-11-21T02:45:51.287 回答
0

遇到了同样的问题,我不得不使用storage关键字,因为我试图修改全局存储阵列。

bytes32[] storage someArray = someGlobalStorageArray;
于 2017-05-26T00:28:16.547 回答