Arrays 稳固性:未实现的特性错误:此处未实现嵌套动态数组

Arrays 稳固性:未实现的特性错误:此处未实现嵌套动态数组,arrays,dynamic,nested,solidity,Arrays,Dynamic,Nested,Solidity,当我试图以坚实的方式做这件事时,它给了我 UnimplementedFeatureError:此处未实现嵌套动态数组 我在代码示例中看到了这一点。坚固性不支持这一点吗 编辑-在下面发布完整的代码。所以我发现问题只存在于最后一个函数中。我不是在返回一个动态数组吗?如何实现相同的功能(我希望返回数据的字符串数组) pragma-solidity^0.4.6; 合同完整性{ //映射每个电子邮件地址的EmailIntegrityStructs数组。 //第一个元素将用于完整性记录。 //其余部分将用于

当我试图以坚实的方式做这件事时,它给了我 UnimplementedFeatureError:此处未实现嵌套动态数组

我在代码示例中看到了这一点。坚固性不支持这一点吗

编辑-在下面发布完整的代码。所以我发现问题只存在于最后一个函数中。我不是在返回一个动态数组吗?如何实现相同的功能(我希望返回数据的字符串数组)

pragma-solidity^0.4.6;
合同完整性{
//映射每个电子邮件地址的EmailIntegrityStructs数组。
//第一个元素将用于完整性记录。
//其余部分将用于审计记录。
枚举项类型{完整性,审核}
结构EmailIntegrityStruct{
ItemType ItemType;
uint时间戳;
字符串数据;
}
映射(地址=>EmailIntegrityStruct[])emailIntegrityStructs;
函数hasEmailIntegrityData(地址emailAddress)公共常量返回(bool-isEmail){
返回emailIntegrityStructs[emailAddress][0]。时间戳==0;
}
函数insertIntegrityData(地址emailAddress、uint时间戳、字符串数据)公共返回(bool success){
if(hasEmailIntegrityData(emailAddress)){
回复();
}
EmailIntegrityStruct内存integrityData;
integrityData.itemType=itemType.Integrity;
integrityData.timestamp=时间戳;
integrityData.data=数据;
emailIntegrityStructs[emailAddress].push(integrityData);
返回emailIntegrityStructs[emailAddress]。长度==1;
}
函数insertAuditData(地址emailAddress、uint时间戳、字符串数据)公共返回(bool success){
如果(!hasEmailIntegrityData(emailAddress)){
回复();
}
EmailIntegrityStruct内存审核数据;
auditData.itemType=itemType.Audit;
auditData.timestamp=时间戳;
auditData.data=数据;
emailIntegrityStructs[emailAddress].push(审核数据);
返回emailIntegrityStructs[emailAddress].length>1;
}
函数getIntegrityData(地址emailAddress)公共常量返回(字符串数据){
如果(!hasEmailIntegrityData(emailAddress)){
回复();
}
返回emailIntegrityStructs[emailAddress][0]。数据;
} 
函数getAuditData(address emailAddress)公共常量返回(字符串[]数据){
如果(!hasEmailIntegrityData(emailAddress)){
回复();
}
var length=emailIntegrityStructs[emailAddress].length;
字符串[]内存auditData=新字符串[](长度-1);
对于(uint i=1;i
这对我来说很好

我添加了
MyStruct
的定义,并将Solidity版本升级到当前版本(尽管它也使用旧的
pragma
编译得很好)。以下是我编译的代码:

可能是您使用的是旧版本的Solidity编译器吗?(这个
^0.4.6
让我觉得也许你是。)


你的
MyStruct
是什么?也许一个更有趣的结构会失败。一般来说,请尝试提供完整的代码示例,以再现您看到的问题。

这对我来说很好

我添加了
MyStruct
的定义,并将Solidity版本升级到当前版本(尽管它也使用旧的
pragma
编译得很好)。以下是我编译的代码:

可能是您使用的是旧版本的Solidity编译器吗?(这个
^0.4.6
让我觉得也许你是。)


你的
MyStruct
是什么?也许一个更有趣的结构会失败。一般来说,请尝试提供完整的代码示例来重现您看到的问题。

Solidity和Javascript允许嵌套数组,但我们无法将嵌套动态数组从Solidity拉到Javascript世界


这是solidity和javascript之间桥梁的局限性。由于solidity中的字符串表示为动态数组,因此我们无法传输字符串数组

Solidity和Javascript允许嵌套数组,但我们无法将嵌套动态数组从Solidity拉到Javascript世界


这是solidity和javascript之间桥梁的局限性。由于solidity中的字符串表示为动态数组,因此我们无法传输字符串数组

我不想让你浪费时间回答这个问题。我刚刚读到,可以从函数返回其他类型的数组,但不能返回字符串数组,因为字符串本身就是数组。我正在研究如何解决这个问题。谢谢你的帮助!我不想让你浪费时间回答这个问题。我刚刚读到,可以从函数返回其他类型的数组,但不能返回字符串数组,因为字符串本身就是数组。我正在研究如何解决这个问题。谢谢你的帮助!
pragma solidity ^0.4.6;

contract EmailIntegrity {

  // Map an array of EmailIntegrityStructs for each email address.
  // The first element will be used for the integrity record.
  // The rest will be used for audit records.

  enum ItemType { Integrity, Audit }

  struct EmailIntegrityStruct {
    ItemType itemType;
    uint timestamp;
    string data;
  }

  mapping(address => EmailIntegrityStruct[])  emailIntegrityStructs;

  function hasEmailIntegrityData(address emailAddress) public constant returns(bool isEmail) {
    return emailIntegrityStructs[emailAddress][0].timestamp == 0;
  }

  function insertIntegrityData(address emailAddress, uint timestamp, string data) public returns(bool success) {
    if (hasEmailIntegrityData(emailAddress)) {
        revert(); 
    }
    EmailIntegrityStruct memory integrityData;
    integrityData.itemType = ItemType.Integrity;
    integrityData.timestamp = timestamp;
    integrityData.data = data;
    emailIntegrityStructs[emailAddress].push(integrityData);
    return emailIntegrityStructs[emailAddress].length == 1;
  }

  function insertAuditData(address emailAddress, uint timestamp, string data) public returns(bool success) {
    if (!hasEmailIntegrityData(emailAddress)) {
        revert(); 
    }
    EmailIntegrityStruct memory auditData;
    auditData.itemType = ItemType.Audit;
    auditData.timestamp = timestamp;
    auditData.data = data;
    emailIntegrityStructs[emailAddress].push(auditData);
    return emailIntegrityStructs[emailAddress].length > 1;
  }

  function getIntegrityData(address emailAddress) public constant returns(string data) {
    if (!hasEmailIntegrityData(emailAddress)) {
        revert(); 
    }
    return emailIntegrityStructs[emailAddress][0].data; 
  } 

  function getAuditData(address emailAddress) public constant returns(string[] data) {
    if (!hasEmailIntegrityData(emailAddress)) {
        revert(); 
    }
    var length = emailIntegrityStructs[emailAddress].length;
    string[] memory auditData = new string[](length - 1);
    for (uint i = 1; i < length ; i++) {
           auditData[i] = emailIntegrityStructs[emailAddress][i].data;
    }
    return auditData; 
  }

}
pragma solidity ^0.4.19;

contract MyContract{
    struct MyStruct {
        uint256 foo;
    }
    mapping(address => MyStruct[])  myStruct;
}