Ethereum 构造器中余额[]的坚固性错误;“索引表达式不能省略”;

Ethereum 构造器中余额[]的坚固性错误;“索引表达式不能省略”;,ethereum,solidity,truffle,Ethereum,Solidity,Truffle,刚接触Solidity和smart contracts,我一直在尝试在Windows上设置一个测试环境,但在尝试测试运行一个块菌盒装环境(MetaCoin)时,我被卡住了 在下面的构造函数中,[]正在做一些错误的事情。我的IDE(具有SOLIDATY扩展名的vscode)抛出一条消息:“不能忽略索引表达式”。为什么会出现这种情况 contract MetaCoin { mapping (address => uint) public balances; event Tr

刚接触Solidity和smart contracts,我一直在尝试在Windows上设置一个测试环境,但在尝试测试运行一个块菌盒装环境(MetaCoin)时,我被卡住了

在下面的构造函数中,[]正在做一些错误的事情。我的IDE(具有SOLIDATY扩展名的vscode)抛出一条消息:“不能忽略索引表达式”。为什么会出现这种情况

 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];
    }
}
合同元内容{
映射(地址=>uint)公共余额;
事件传输(地址索引自,地址索引至,uint256值);
构造函数()公共{
结余[]=10000;
}
函数sendCoin(地址接收者,uint金额)公共返回(bool足够){
如果(余额[msg.sender]<金额)返回false;
余额[消息发送方]-=金额;
余额[接收方]+=金额;
发出传输(消息发送方、接收方、金额);
返回true;
}
函数getBalanceInEth(地址addr)公共视图返回(uint){
返回ConvertLib.convert(getBalance(addr),2);
}
函数getBalance(地址addr)公共视图返回(uint){
返回余额[地址];
}
}
如果我能解决这个问题,下一步怎么办?我如何在账户之间进行转账,以确保其正常工作

我一直遵循这个指南:

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

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

balances[msg.sender] = 10000;

对于第二个问题,当您继续了解智能合约时,您可以调用
sendCoin
函数

,建议查看OpenZeppelin合约。有关详细信息,请参阅文档:如果您对使用OpenZeppelin有疑问,可以在社区论坛中提问:披露:我是OpenZeppelin的社区经理
balances[msg.sender] = 10000;