Arrays

將結構數組作為參數傳遞:僅允許庫在公共或外部函式中使用映射類型

  • December 9, 2019

我正在嘗試將多個項目推送到契約中的結構數組中。如果可以將結構數組作為參數傳遞,則找不到明確的答案。

顯然我不能,但我從編譯器那裡得到了另一種錯誤。它認為我正在傳遞一個映射:Only libraries are allowed to use the mapping type in public or external functions.

這是程式碼

mapping (address => Review[]) reviewsMap;
mapping (address => uint24) reviewCounts;

function addMultipleReviews(Review[] memory array) public {
   address author = msg.sender;
   for (uint i=0; i < array.length; i++) {
     reviewsMap[author].push(array[i]);
   } 
   reviewCounts[author] = reviewCounts[author] + array.length;
 }

這是不允許的嗎?如果是這樣,添加多個評論的替代方法是什麼?

您不允許傳遞結構(或您的情況下的結構數組)。

而不是傳遞一個Review元素數組,而是傳遞幾個數組 - 這個結構中的每個欄位一個。

Review然後在將其推送到 之前構造一個實例reviewsMap[author]

我建議斷言數組的長度是相同的。

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