在语句players.push(msg.sender);中,我得到以下错误:
成员"push“在地址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
}
}发布于 2021-03-25 12:41:53
如果您正在使用Solity0.7进行编译,那么一切都很好。
此错误显示在Solity0.8中,这是因为在0.8中,msg.sender不再是自动的payable。所以你需要先把它变成payable:
players.push(payable(msg.sender));来自docs页面坚固度v0.8.0破碎变化
全局变量
tx.origin和msg.sender的类型为address,而不是address payable__。通过使用显式转换(即payable(tx.origin)或payable(msg.sender)__ ),可以将它们转换为payable(msg.sender)。
发布于 2021-03-25 12:46:04
我必须显式地将msg.sender转换成payable才能让它正常工作。
// 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);
}
}参考文献:
https://stackoverflow.com/questions/66799537
复制相似问题