【问题标题】:Viewing and modifiying elements inside Array of Structs in Solidity在 Solidity 中查看和修改 Array of Structs 中的元素
【发布时间】:2023-01-04 11:37:26
【问题描述】:

嗨,Solidity 开发者! 在我面临的一个小问题上,我需要你的帮助。我想修改结构数组中结构的某些元素。我创建了另一个映射 (uint => Struct) 以更快地搜索和修改。我正在使用 **pragma solidity ^0.8.8; ** 顺便一提。

结构:

struct Candidate {
    uint candidateId;
    string CandidateName;
    string party;
    uint voteCount;
}

数组和映射:

Candidate[] public candidates;

//store candidates for faster votes 
mapping(uint => Candidate) public candidatesMap;

测试候选人并在结构数组中填充一些候选人的构造函数:

//constructor to hard fill candidates
constructor(){
    addCandidate(1,"candidate1","party1");
    addCandidate(2,"candidate2","party2");
    addCandidate(3,"candidate3","party3");
}

获取和返回候选人信息的函数:

//function to get candidate infos
function getCandidateInfo(uint _candidateId) public view returns (uint, 
string memory, string memory) {
    return(
        candidatesMap[_candidateId].candidateId,
        candidatesMap[_candidateId].CandidateName,
        candidatesMap[_candidateId].party
    );
}

**请帮帮我。我一直在这里和那里寻找几天,但找不到解决方案。 **

我在 Remix 中的代码截图:

我试图将 Pragma solidity 版本更改得更高并添加

pragma abicoderv2;

但仍然不起作用。

【问题讨论】:

    标签: ethereum solidity remix


    【解决方案1】:

    问题是您试图在 public 函数内返回 storage 引用。解决方案是将存储引用复制到memory 中,然后将其返回。假设您的代码的所有其他部分都是正确的,这应该有效:

    function getCandidateInfo(uint _candidateId) public view returns (uint, 
    string memory, string memory) {
    
        Candidate memory candidate=candidatesMap[_candidateId]
        return(
            candidate.candidateId,
            candidate.CandidateName,
            candidate.party
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多