Ethereum 坚固性,成员“;“转让”;参数依赖后找不到或不可见

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; }

使用坚固度^0.5.0, 实际上,我正在尝试实现一个在^0.4.17中工作的旧代码,但它在混音中抛出了一个错误。 我检查了语法和所有东西,但就是看不出哪里出了问题。 非常感谢您的帮助

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]
已经是一个
地址
,所以铸造它没有任何作用。我认为实际的问题是类型是
地址
,而不是
应付地址
。解决办法是使用
地址支付[]公共玩家