openlang

Solc 0.7.0이 mapping 멤버를 가진 struct 생성을 거부해요

npm으로 설치한 Solc version 0.7.0을 쓰고 있어요. 안에 mapping이 있는 Struct를 만들면 "Struct containing a (nested) mapping cannot be constructed."라는 메시지가 나옵니다.

코드를 봐 주세요:

// SPDX-License-Identifier: MIT
pragma solidity 0.7.0;

contract Store {
  struct Submission {
    uint256 amount;
    mapping(address => bool) votes;
  }
  Submission[] public submissions;
    ...

  function addSubmission(
    uint256 amount
  ) public {
    Submission memory fresh = Submission({ // compiler reports the error here
      amount: amount
    });

    submissions.push(fresh);
  }
}

이전 solc 버전에서는 같은 코드가 문제없이 빌드됩니다.

살펴봐 주셔서 감사합니다!

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    이렇게 하면 될 겁니다:

    function addSubmission(uint256 amount) public {
      Submission storage fresh = submissions.push();
      fresh.amount = amount;
    }

    그럼!

    영어에서 번역원문 보기
  2. 고유 링크

    제 경우에는 이렇게 해서 됐어요:

    struct Submission {
      uint256 amount;
      mapping(address => bool) votes;
    }
    
    uint256 submissionCount;
    mapping(uint256 => Submission) submissions;
    
    function addSubmission(uint256 amount) public {
      Submission storage fresh = submissions[submissionCount++];
      fresh.amount = amount;
    }
    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. D 배열에서 일치하는 항목 찾기

    연관 배열에서는 이렇게 할 수 있어요 일반 배열에서는 어떻게 하나요? 예를 들면 이런 검증식을 쓰고 싶어요

    답글 2최근 활동 d
  2. 에러 없이 끝난 rows.Next 루프

    database/sql로 만든 작은 도구가 목록을 반만 돌려줬어. 에러 없이. 코드는 이래. 컨텍스트에 데드라인이 있었어. 가져오는 도중에 데드라인이 지나서 rows.Next()가 false를 줬고, 루프가 끝났고, 함수는…

    답글 3최근 활동 sqlgo
  3. partial index와 WHERE 절의 파라미터

    수업 프로젝트로 Go로 작은 job runner를 만들고 있어요. 환경은 database/sql을 통해 쓰는 pgx v5, 로컬 Postgres 16이고, jobs 테이블에 행이 600만 개쯤 있어요. 거의 다 done이고…

    답글 10최근 활동 sqlgo