团结一致,在依赖参数后找不到或看不到成员“转移”

时间:2018-11-27 12:42:58

标签: ethereum solidity smartcontracts

使用Solidity ^ 0.5.0, 我实际上正在尝试实现在^ 0.4.17中工作的旧代码,但它在Remix上引发错误。 我检查了语法和所有内容,但无法捕捉到问题所在。 任何帮助表示高度赞赏。

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 / Lottery.sol:22:8:TypeError:在依赖于参数之后找不到或不可见成员“ transfer” 在地址中查找。

players [index] .transfer(address(msg.sender).balance);

^ --------------------- ^

2 个答案:

答案 0 :(得分:5)

请参阅Solidity v0.5.0 Breaking Changes

here所指出:

  

地址类型分为地址和应付地址,其中只有应付地址提供转移功能。

有关更多详细信息,请参见我的答案here

更改此行:

address[] public players;

对此:

address payable[] public players;

编辑

感谢smarx!

答案 1 :(得分:2)

您在初始声明中缺少payable修饰符。 更改

  

地址[]公共玩家;

  

应付地址[]公共玩家;