无法在以太坊投票应用程序的另一个结构中创建结构数组

时间:2019-01-11 16:52:24

标签: blockchain ethereum solidity smartcontracts truffle

我正在尝试在Solidity中创建一个投票应用程序,在该应用程序中我想初始化可在较大结构中引用的候选结构数组。但是,我在迁移时始终收到错误消息:

  

UnimplementedFeatureError:类型struct Vote.Candidate memory [] memory复制到尚不支持的存储。

Candidate[] public candidates;
uint public candidateCount;

function addCandidate(string memory name) public {
    candidates.length += 1;
    Candidate memory newCandidate;
    candidateCount++;
    newCandidate.name = name;
    newCandidate.id = candidateCount;
    newCandidate.voteCount = 0;
    candidates[candidateCount] = newCandidate;
}

struct Candidate  {
    uint id;
    string name;
    uint voteCount;
}

constructor () public {
    addCandidate("Cand1");
}

这应将'Cand1'结构存储在候选数组中。

有什么我想念的吗?提前致谢。我无法在线找到任何信息!

1 个答案:

答案 0 :(得分:0)

实体数组保存在@Component({ ... encapsulation: ViewEncapsulation.None }) export class AppComponent { 中,而不是storage中。请参阅this article,以更好地了解两者之间的区别。由于存储是动态的,因此您不能直接将元素添加到索引中,因为该索引可能不存在于存储中。如果希望将元素添加到动态存储阵列,则应像这样使用memory

push()

第二个选择是使用映射,因为与Solidity中的数组相比,由于映射的复杂性和成本较低,所以映射比数组更有利。但是,使用映射时,可能必须根据您的特定实现要求分别跟踪长度和索引。