Solidity

將合約推送到另一個合約中的數組

  • June 10, 2022

我是 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++;
   }
}

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