Solidity
建構子參數需要“記憶體”作為數據位置,但不需要 uint?
好的,我想弄清楚為什麼 Remix IDE 會拋出一個錯誤,說
必須給出數據位置“記憶體”……
對於字元串參數,但 uint 參數不會引發任何錯誤?
pragma solidity >=0.4.25 <0.6.0; contract Monopoly { string public player1; uint32 public player2; uint32 public player3; constructor(string memory _player1, uint32 _player2, uint32 _player3) public { player1 = _player1; player2 = _player2; player3 = _player3; } }
看看這裡:https ://solidity.readthedocs.io/en/latest/050-break-changes.html#explicitness-requirements
結構、數組或映射類型的所有變數的顯式數據位置現在是強制性的。這也適用於函式參數和返回變數。例如,更改 uint
$$ $$x = m_x 到 uint$$ $$儲存 x = m_x 和函式 f(uint$$ $$$$ $$x) 到函式 f(uint$$ $$$$ $$memory x) 其中 memory 是數據位置,可能會相應地被 storage 或 calldata 替換。請注意,外部函式需要具有 calldata 數據位置的參數。
string
是一種特定類型的數組,所以這個邏輯適用。這類問題以及將來可能會出現此類問題是我傾向於使用特定版本
pragma
而不是范圍的原因之一。這樣,如果您切換編譯器(可能沒有意識到),您就不會遇到新的和奇怪的問題 - 只是對編譯器版本的抱怨。希望能幫助到你。