Solidity

在結構中使用映射

  • March 4, 2022

我正在嘗試在結構中使用映射:

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 =&gt; address) poolUserList;

引用自:https://ethereum.stackexchange.com/questions/84691