Ethereum 坚固性,成员“;“转让”;参数依赖后找不到或不可见
使用坚固度^0.5.0, 实际上,我正在尝试实现一个在^0.4.17中工作的旧代码,但它在混音中抛出了一个错误。 我检查了语法和所有东西,但就是看不出哪里出了问题。 非常感谢您的帮助Ethereum 坚固性,成员“;“转让”;参数依赖后找不到或不可见,ethereum,solidity,smartcontracts,Ethereum,Solidity,Smartcontracts,使用坚固度^0.5.0, 实际上,我正在尝试实现一个在^0.4.17中工作的旧代码,但它在混音中抛出了一个错误。 我检查了语法和所有东西,但就是看不出哪里出了问题。 非常感谢您的帮助 pragma solidity ^0.5.0; contract Lottery{ address public manager; address[] public players; constructor() public { manager = msg.sender; }
pragma solidity ^0.5.0;
contract Lottery{
address public manager;
address[] public players;
constructor() public {
manager = msg.sender;
}
function participate() public payable {
require(msg.value > .01 ether);
players.push(msg.sender);
}
function pseudoRandom() private view returns(uint){
return uint(keccak256(abi.encodePacked(block.difficulty, now, players)));
}
function pickWinner() public {
uint index = pseudoRandom() % players.length;
players[index].transfer(address(this).balance);
}
}
以下是错误消息:
browser/lotket.sol:22:8:TypeError:未找到成员“transfer”或在依赖参数后不可见
在地址中查找
玩家[索引].转账(地址(msg.sender).余额)
^---------------------^请参阅
正如所指出的那样:
地址类型分为地址和应付地址,其中只有应付地址提供传递功能
更多细节请参见我的答案
更改此行:
address[] public players;
为此:
address payable[] public players;
编辑
谢谢smarx 初始声明中缺少应付修改器。 改变 向[]公众人物致辞 到 地址[]公众玩家
这个答案被接受了,但我不认为这是上述代码中的实际问题
players[index]
已经是一个地址
,所以铸造它没有任何作用。我认为实际的问题是类型是地址
,而不是应付地址
。解决办法是使用地址支付[]公共玩家
。