【问题标题】:Getting array of struct from another contract从另一个合约中获取结构数组
【发布时间】:2021-04-30 13:41:06
【问题描述】:

我有 2 份合同。

contract Contract1{
  struct Data {
      uint data1;
      string data2;
  }
  Data [] newData;
}

假设我在 newData 中有数据

import "./Contract1.sol";
contract Contract2{
  Data storage newOne = newData[0];
}

我想达到上面 Contract1 中的结构数组。 如何从 Contract2 访问 Contract1?

【问题讨论】:

    标签: ethereum solidity smartcontracts contract


    【解决方案1】:

    您可以使用 is 关键字扩展合同。

    子合同(在您的情况下为 Contract2)可以访问所有 non-private 父级(在您的情况下为 Contract1)属性。

    pragma solidity ^0.8;
    
    import "./Contract1.sol";
    
    contract Contract2 is Contract1 {
        function foo() external {
            Data storage newOne = newData[0];
            // newOne.data1 = 1;
            // newOne.data2 = 'hello';
        }
    }
    

    编辑:注意newData[0] 正在尝试访问数组的索引0,但是在部署合约时,数组是空的(没有索引 0)。您可以通过执行此函数来创建第一项(索引为 0 和虚拟数据):

    function add() external {
        newData.push(Data(1, 'a'));
    }
    

    【讨论】:

    • 我遇到了类型错误。合同“Contract2”应标记为抽象。
    • @almi 这与您的原始问题和解决方案无关。当你的合约有一个没有实现的函数定义时,会出现“应该标记为抽象”错误,例如function foo() external;(注意末尾的分号,没有函数体)。
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2016-02-08
    相关资源
    最近更新 更多