Ethereum “成员”;推;在address[]storage ref中的参数相关查找后找不到或不可见

Ethereum “成员”;推;在address[]storage ref中的参数相关查找后找不到或不可见,ethereum,solidity,Ethereum,Solidity,在语句players.push(msg.sender)中我收到以下错误: 在地址[]存储参考中的参数相关查找后,未找到成员“推送”或成员“推送”不可见。 因此,我无法以稳定的方式处理应付数组。这里的解决办法是什么 // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0; contract Lottery { address public manager; address payable[] public pl

在语句
players.push(msg.sender)中我收到以下错误:

在地址[]存储参考中的参数相关查找后,未找到成员“推送”或成员“推送”不可见。

因此,我无法以稳定的方式处理应付数组。这里的解决办法是什么

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0;

contract Lottery {
    address public manager;
    address payable[] public players;

    constructor() {
        manager = msg.sender;
    }

    function enter() public payable {
        players.push(msg.sender);            // ERROR IN THIS LINE
    }
}

如果使用Solidity 0.7进行编译,则一切正常

该错误在Solidity 0.8中显示,这是因为在0.8中,发件人不再自动支付。因此,您需要首先将其设置为应付账款:

players.push(payable(msg.sender));

我必须显式地将
msg.sender
转换为
payment
,才能让它正常工作

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0;

contract Lottery {
    address payable public manager;
    address payable[] public players;
    
    constructor() {
        manager = payable(msg.sender);
    }
    
    function enter() public payable {
        players.push(manager);
    } 
}
参考资料: