Solidity

語法錯誤:類型 tuple(bool,bytes memory) 不能隱式轉換為預期的 bool 類型

  • June 25, 2019

我正在嘗試編譯以下程序:

pragma solidity ^0.5.1;

contract MKotET1_1{

   address payable king; uint public claimPrice = 100;

   function calculateCompensation() public returns(uint) {
   }

   function( ) external payable {
      if (msg.value  < claimPrice) revert();
          uint compensation = calculateCompensation();
          if(!king.call.value(compensation)("")) revert();
         king = msg.sender;
      }
   }

我收到以下語法錯誤:

> > solc MKotET_stackExchange.sol MKotET_stackExchange.sol:12:14:錯誤:一元運算符!不能應用於 >type tuple(bool,bytes memory) if(!king.call.value(compensation)("")) revert(); ^——————————–^ MKotET_stackExchange.sol:12:14: 錯誤: 類型元組(bool,bytes memory) 不能隱式轉換為預期的 bool 類型。if(!king.call.value(compensation)("")) revert(); ^——————————–^ > > >

有人請指導我如何刪除上述語法錯誤。

祖爾菲。

試試這個:

pragma solidity ^0.5.1;

contract MKotET1_12{

   address payable king; uint public claimPrice = 100;

   function calculateCompensation() public returns(uint) {}

   function() external payable {
       if (msg.value  < claimPrice) revert();
           uint compensation = calculateCompensation();
           (bool success, ) = king.call.value(compensation)("");
           require(success);
           king = msg.sender;
       }
   }

來自文件

為了與不遵守 ABI 的合約進行互動,或者為了更直接地控制編碼,提供了calldelegatecall功能staticcall。它們都採用單個 bytes memory參數並返回成功條件(作為 a bool)和返回的數據(bytes memory)。

引用自:https://ethereum.stackexchange.com/questions/72125