在声明中,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)
我必须明确转换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);
}
}
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |