Solidity-0.5.x

require(msg.sender.call(’’)): 在依賴於參數的查找後沒有找到匹配的聲明

  • January 24, 2022

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

pragma solidity ^0.5.9;  

contract Mutex {       
bool locked;        

modifier noReentrancy() {
     require(!locked);
     locked = true;
     _;
     locked = false;       
   
}     

function f() noReentrancy public returns (uint) {
       
       require(msg.sender.call(""));
       return 1;        
         
}  

}

我收到以下錯誤消息:

solc Mutex.sol Mutex.sol:13:7: Error: No matching declaration found after argument-dependent lookup.
      require(msg.sender.call(""));
      ^-----^

有人,請指導我。

之前的 solc 0.5.0,call返回bool.

從 solc 0.5.0 開始,call返回(bool, bytes memory).

由於您使用的是 solc 0.5.x,因此請更改:

require(msg.sender.call(""));

對此:

(bool success,) = msg.sender.call("");
require(success);

有趣的是,您的整個程式碼(正確)出現在官方文件中。

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