openlang

Solc 0.7.0 拒绝创建带有 mapping 成员的结构体

我通过 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 返回了 false,错误却不知道去哪了

    一个基于 database/sql 的小工具返回了半个列表。没有报错。代码如下。 context 带了 deadline。取数据到一半 deadline 到了,rows.Next() 返回 false,循环结束,函数把已经收集到的东西加上 nil 一…

    回复 3最近活动 sqlgo
  3. 部分索引与 WHERE 子句中的参数

    我在给课程项目用 Go 写一个小型任务执行器。环境是通过 database/sql 使用 pgx v5,本地 Postgres 16,还有一张约 600 万行的 jobs 表。几乎全是 done,只有几百行是 queued。我给等待中的行建了个部分索…

    回复 10最近活动 sqlgo