在地址 payable[] 存储 ref 中进行参数相关查找后,成员 "push" 未找到或不可见
Member "push" not found or not visible after argument-dependent lookup in address payable[] storage ref
在语句 players.push(msg.sender);
中出现以下错误:
在地址 payable[] 存储 ref.
中进行参数相关查找后,未找到或不可见成员“push”
因此我无法在 solidity 中推送地址 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
}
}
如果您使用 Solidity 0.7 进行编译,一切正常。
此错误显示在 Solidity 0.8 中,这是因为在 0.8 中 msg.sender
不再自动 payable
。所以你需要先做到payable
:
players.push(payable(msg.sender));
我必须明确地将 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);
}
}
参考文献:
Casting from address to address payable
TypeError: push is not detected as a function for address payable dynamic array
在语句 players.push(msg.sender);
中出现以下错误:
在地址 payable[] 存储 ref.
中进行参数相关查找后,未找到或不可见成员“push”因此我无法在 solidity 中推送地址 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
}
}
如果您使用 Solidity 0.7 进行编译,一切正常。
此错误显示在 Solidity 0.8 中,这是因为在 0.8 中 msg.sender
不再自动 payable
。所以你需要先做到payable
:
players.push(payable(msg.sender));
我必须明确地将 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);
}
}
参考文献:
Casting from address to address payable
TypeError: push is not detected as a function for address payable dynamic array