Solidity
如何在solidity中初始化建構子內的數組?
我正在使用 remix IDE。我想在呼叫建構子時定義數組的大小。有人請幫忙。這是我嘗試過的:
pragma solidity >=0.7.0 <0.8.0; contract Vote { struct Proposal { uint votecount; } Proposal[] proposal; constructor(uint no) { proposal=new Proposal[](no); } }
錯誤:UnimplementedFeatureError:複製類型 struct Vote.Proposal 記憶體
$$ $$尚不支持記憶體到儲存。其他 :
pragma solidity >=0.7.0 <0.8.0; contract Vote { struct Proposal { uint votecount; } Proposal[] proposal; constructor(uint no) { for(uint i=0;i<no;i++) proposal.votecount.push(0); } }
錯誤:TypeError:在 struct Vote.Proposal storage ref 中進行參數相關查找後,成員“votecount”未找到或不可見
$$ $$儲存參考 提議.votecount.push(0); ^—————-^
您的程式碼中的
Proposal[] proposal
聲明是一個儲存數組。因此,您不需要使用
proposal = new Proposal[](...);
.您可以簡單地將任意數量的項目推入其中。
唯一真正缺少的是訪問級別(
public
/internal
/private
)。至於您的推送嘗試,只需更改以下內容:
proposal.votecount.push(0);
對此:
proposal.push(Proposal(0));
或者更好的是,對此:
proposal.push(Proposal({votecount: 0}));
更新:
通常您應該了解 4 種類型的數組:
- 靜態局部數組 - 在函式內部以恆定大小聲明
- 動態局部數組 - 在函式內部聲明,沒有固定大小
- 靜態全域數組 - 在所有函式之外以恆定大小聲明
- 動態全域數組 - 在所有函式之外聲明,沒有固定大小
類型 1 和 2 位於
memory
.類型 3 和 4 位於
storage
.類型 2 是您嘗試使用之前唯一需要分配的類型,例如:
function func(uint len) { uint[] memory arr = new uint[](len); ... }