You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity编译报错address无法隐式转换为address payable问题问询

报错修复方案

问题原因

Solidity自0.5版本起收紧了地址类型的隐式转换规则:msg.sender默认是普通address类型,无法直接赋值给声明为address payable的变量,也无法直接加入address payable类型的数组,必须做显式转换。

修复步骤

修改两处报错代码,给msg.sender套上payable()做显式类型转换:

  • 构造函数内的赋值语句修改为owner = payable(msg.sender);
  • fund函数内的数组push语句修改为funders.push(payable(msg.sender));

修复后完整代码

contract FundMe {
    
    mapping(address =>uint256) public addressToAmountFunded;
    
    address payable[] public funders;
    
    address payable public owner;
    
    constructor() public {
        owner = payable(msg.sender);
    }
    
    function fund() public payable {
        uint256 minimumUSD = 50 * 10 ** 18; 
        
        require(getConversionRate(msg.value) >= minimumUSD, "you need to spend more ETH my friend");
        
        addressToAmountFunded[msg.sender] += msg.value;
        
        funders.push(payable(msg.sender));
    }

    // 请补充实现getConversionRate函数,否则会触发函数未定义的编译报错
}

通用转换规则

后续如果需要把任意普通address类型变量转换为address payable,都可以用payable(普通地址变量)的语法完成显式转换。

内容的提问来源于stack exchange,提问作者Nat Serrano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:15:03