Solidity
在結構中使用映射
我正在嘗試在結構中使用映射:
struct PoolStruct { uint currentUserID; uint activeUserID; uint price; uint minimalReferrals; mapping(uint => address) poolUserList; }
程式碼可以編譯,所以我想它是被允許的。當我嘗試分配給該屬性時,問題就開始了:
PoolStruct memory pool; pool = PoolStruct({ currentUserID: 1, activeUserID: 1, price: POOL_PRICES[i], minimalReferrals: POOL_MINIMAL_REFERRALS[i] }); pool.poolUserList[1] = msg.sender;
在最後一行出現錯誤…
TypeError: Member "poolUserList" is not available in struct Definitions.PoolStruct memory outside of storage. pool.poolUserList[currUserID] = msg.sender; ^---------------^
有什麼辦法可以使這項工作?
問題是映射只能存在於儲存中。定義
PoolStruct memory pool;
時,映射成員不能在記憶體中創建,因此應該將記憶體結構視為映射成員從未存在過(對於solidity < 0.7.0)。從solidity 0.7.0 開始,該行將
PoolStruct memory pool
產生一個錯誤,指出包含(嵌套)映射的結構必須具有儲存作為數據位置。
只需將映射保留在結構之外。您不必保留在結構內
mapping(uint => address) poolUserList;