在地址 pay[] 存储引用中进行依赖于参数的查找后,未找到成员“推送”或不可见

Aya*_*yan 4 ethereum solidity

在声明中,players.push(msg.sender);我收到以下错误:

在地址 payable[] 存储引用中进行依赖于参数的查找后,未找到成员“推送”或不可见。

因此,我无法可靠地解决应付数组。这里的解决方法是什么?

// 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
    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*jda 10

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

这个错误显示在 Solidity 0.8 中,这是因为在 0.8msg.sender中不再自动payable。所以你需要先做到payable

players.push(payable(msg.sender));
Run Code Online (Sandbox Code Playgroud)


Aya*_*yan 8

我必须明确转换msg.senderpayable才能使其正常工作。

// 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);
    } 
}
Run Code Online (Sandbox Code Playgroud)

参考:

从地址转换为应付地址

类型错误:未将推送检测为应付地址动态数组的函数