Solidity
TypeError:函式中參數的數據位置必須是“儲存”或“記憶體”,但沒有給出
/// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @return Returns transaction ID. function addTransaction(address destination, uint value, bytes data) internal returns (uint transactionId) { transactionId = transactionCount; transactions[transactionId] = Transaction({ destination: destination, value: value, data: data, executed: false }); transactionCount += 1; Submission(transactionId); }
在函式中 addTransaction(address destination, uint value, bytes data)
帶下劃線的字節數據參數
從 Solidity 0.5.0 開始。https://solidity.readthedocs.io/en/v0.5.0/050-break-changes.html
結構、數組或映射類型的所有變數的顯式數據位置現在是強制性的。這也適用於函式參數和返回變數。例如,更改 uint
$$ $$x = m_x 到 uint$$ $$儲存 x = m_x 和函式 f(uint$$ $$$$ $$x) 到函式 f(uint$$ $$$$ $$memory x) 其中 memory 是數據位置,可能會相應地被 storage 或 calldata 替換。請注意,外部函式需要具有 calldata 數據位置的參數。
你可以通過說參數是一個數組
memory
來修復它。bytes``byte
pragma solidity 0.5.0; contract Memory { function addTransaction(address destination, uint value, bytes memory data) internal returns (uint transactionId) { return 0; } }
可以安全地忽略警告。我想讓這個範例盡可能接近原始範例並確認它可以編譯。