首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在地址payable[]存储参考文件中的依赖于参数的查找后找不到成员"push“或不可见

在地址payable[]存储参考文件中的依赖于参数的查找后找不到成员"push“或不可见
EN

Stack Overflow用户
提问于 2021-03-25 12:30:28
回答 2查看 11.8K关注 0票数 23

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

成员"push“在地址payable[]存储参考文献中的参数依赖查找后找不到或不可见

因此,我无法在可靠的情况下处理应付款数组。这是怎么回事?

代码语言:javascript
复制
// 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
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-25 12:41:53

如果您正在使用Solity0.7进行编译,那么一切都很好。

此错误显示在Solity0.8中,这是因为在0.8中,msg.sender不再是自动的payable。所以你需要先把它变成payable

代码语言:javascript
复制
players.push(payable(msg.sender));

来自docs页面坚固度v0.8.0破碎变化

全局变量tx.originmsg.sender的类型为address,而不是address payable__。通过使用显式转换(即payable(tx.origin)payable(msg.sender)__ ),可以将它们转换为payable(msg.sender)

票数 57
EN

Stack Overflow用户

发布于 2021-03-25 12:46:04

我必须显式地将msg.sender转换成payable才能让它正常工作。

代码语言:javascript
复制
// 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);
    } 
}

参考文献:

从地址到应付地址的转换

TypeError:未检测到push作为地址应付动态数组的函数

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

https://stackoverflow.com/questions/66799537

复制
相关文章

相似问题

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