首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数中使用balances[]的稳健性错误,“索引表达式不能省略”

构造函数中使用balances[]的稳健性错误,“索引表达式不能省略”
EN

Stack Overflow用户
提问于 2019-08-13 15:01:40
回答 1查看 604关注 0票数 1

对于可靠和智能的契约来说,我一直在尝试在Windows上设置一个测试环境,但是我在尝试运行一个松露盒环境(MetaCoin)时陷入了困境。

在下面的构造函数中,balances[]做了一些错误的事情。我的IDE (带有稳固扩展的vscode)抛出一条消息:“不能省略索引表达式”。为什么这个会出现?

代码语言:javascript
复制
 contract MetaCoin {
    mapping (address => uint) public balances;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    constructor() public {
        balances[] = 10000;
    }

    function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
        if (balances[msg.sender] < amount) return false;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Transfer(msg.sender, receiver, amount);
        return true;
    }

    function getBalanceInEth(address addr) public view returns(uint){
        return ConvertLib.convert(getBalance(addr),2);
    }

    function getBalance(address addr) public view returns(uint) {
        return balances[addr];
    }
}

如果我能解决这个问题,下一步是什么?我如何在帐户之间进行转账以查看它的工作情况?

我一直在遵循这个指南:https://medium.com/edgefund/ethereum-development-on-windows-part-1-da260f6a6c06

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-13 15:29:39

代码语言:javascript
复制
mapping (address => uint) public balances;

balances是从address到uint的映射,但是在构造函数中,您没有提供任何地址来将uint设置为。

您可以添加msg.sender,以便将初始余额设置为部署契约的地址。

代码语言:javascript
复制
balances[msg.sender] = 10000;

对于第二个问题,只需调用sendCoin函数即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57480522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档