Solidity
創建合約 Solidity 0.5
我的程式碼適用於編譯器 0.4.25,但不適用於最新版本。我想跟踪“契約 1”創建的每個“契約 2”。
契約一
uint public countContract; address[] public deployedContracts; function createContract(string memory _name) public{ address newContract = new Contract2(countContract++, _name); deployedContracts.push(newContract); }
契約 2
uint public id; string public name; constructor(uint _id, string memory _name) public{ id = _id; name = _name; }
我在 Remix 上收到的錯誤是:
browser/temp.sol:9:5: TypeError: 類型合約 Contract2 不能隱式轉換為預期的類型地址。地址 newContract = new Contract2(countContract++, _name);
在 Solidity 0.5 中,您需要顯式儲存正在創建的合約的類型(而不是簡單地使用
address
類型)。使用以下程式碼來實現您的目標:契約一:
uint public countContract; Contract2[] public deployedContracts; function createContract(string memory _name) public { Contract2 newContract = new Contract2(countContract++, _name); deployedContracts.push(newContract); }
契約二:
uint public id; string public name; constructor(uint _id, string memory _name) public { id = _id; name = _name; }
注意:您仍將合約的地址添加到數組中,就像您在 0.4 中所做的那樣。