Solidity
如何在函式內推入數組中的元素?
誰能幫我找出程式碼中這個函式的問題?
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 數組。做檢查。