Solidity

如何在函式內推入數組中的元素?

  • April 27, 2022

誰能幫我找出程式碼中這個函式的問題?

function getVerifiedProposals(uint index) public returns (string[] memory, string[][] memory, address, uint[] memory) {
       string[][] storage tempDocuments;
       address tempAddresses;
       uint[] memory tempAmount;
       
       if (allBidderProposals[index].status == ProposalStatus.verified) { 
           tempDocuments.push(allBidderProposals[index].constraintDocuments);
           tempAddresses = allBidderProposals[index].bidderAddress;
           tempAmount = allBidderProposals[index].quotationAmount;
       }
       return (constraints, tempDocuments, tempAddresses, tempAmount);
   } 

錯誤消息顯示:

Error: This variable is of storage pointer type and can be accessed without prior assignment, which would lead to undefined behaviour.

這是具有正確解釋的 GitHub 問題的連結。https://github.com/ethereum/solidity/issues/12549

推理 - 如果你在函式內部定義一個局部變數,即使它是一個storage類型,它也應該指向一個狀態變數。所以,tempDocuments需要指向一個狀態變數。

我希望這可以解決您的問題。

The other answer on this post doesn't have the correct explanation so please ignore

我認為您不能在函式內聲明數組並將儲存類型設置為“儲存”。函式內定義的每個變數或數組都應該始終是“記憶體”類型。

string[][] memory tempDocuments;

這應該可以解決問題。

雖然我不確定這是否是正確的方法。Solidity 將字元串視為一個數組,因此 tempDocuments 實際上是一個 3D 數組。做檢查。

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