Solidity
將合約推送到另一個合約中的數組
我是 Solidity 的新手,我有一個小問題。例如,我有這 2 份契約
contract Dog { string name; constructor(string _name){ name = _name; } } contract Human { Dog[] dogs; uint currDogs = 0; function addDog() public { dogs[currDogs] = new Dog("test"); //I also tried dogs.push(new Dog("test")); currDogs++; } }
每次我嘗試將狗添加到數組時它都不起作用,我找不到解決方案
編輯:謝謝大家,所有答案都是正確的,即使我的程式碼工作正常,我發現我每次都在重新部署契約,這就是為什麼我的更改沒有得到保存。
您使用的是什麼版本的solidity,您遇到的錯誤是什麼?
我已經測試了您的程式碼,它可以將數據位置**“記憶體”**添加到第一個合約的建構子中的參數並使用
dog.push(new Dog(“test”));
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.14; contract Dog { string name; constructor(string memory _name){ name = _name; } } contract Human { Dog[] public dogs; uint public currDogs; function addDog() public { dogs.push(new Dog("test")); currDogs++; } }
我不確定您要做什麼,但您可以考慮通過以下方式使用結構
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.14; contract Human { struct Dog { string name; } Dog[] public dogs; uint256 public currDogs; function addDog() public { dogs.push(Dog('test')); currDogs++; } }