Solidity

TypeError:函式中參數的數據位置必須是“儲存”或“記憶體”,但沒有給出

  • December 17, 2020
/// @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;
   }
}

可以安全地忽略警告。我想讓這個範例盡可能接近原始範例並確認它可以編譯。

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