我正在尝试在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'结构存储在候选数组中。
有什么我想念的吗?提前致谢。我无法在线找到任何信息!
答案 0 :(得分:0)
实体数组保存在@Component({
...
encapsulation: ViewEncapsulation.None
})
export class AppComponent {
中,而不是storage
中。请参阅this article,以更好地了解两者之间的区别。由于存储是动态的,因此您不能直接将元素添加到索引中,因为该索引可能不存在于存储中。如果希望将元素添加到动态存储阵列,则应像这样使用memory
:
push()
第二个选择是使用映射,因为与Solidity中的数组相比,由于映射的复杂性和成本较低,所以映射比数组更有利。但是,使用映射时,可能必须根据您的特定实现要求分别跟踪长度和索引。