6

Solidity では、 array.length++を使用して、配列のサイズを増やして新しいメンバー用のスペースを作ることができます。しかし、私はエラーが発生しています:

Value must be an lvalue
4

2 に答える 2

8

「arrayname.length = ;」を使用して、ストレージ内の動的配列 (つまり、コントラクト レベルで宣言された配列) のサイズを変更できます。しかし、「左辺値」エラーが発生した場合は、おそらく次の 2 つのいずれかが間違っています。メモリ内の配列のサイズを変更しようとしているか、動的でない配列のサイズを変更しようとしている可能性があります。

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 に答える