Solidity报错:函数调用参数类型无效 无法将AstTokenSale合约隐式转换为address
报错翻译与原因
你遇到的报错中文翻译为:函数调用参数类型无效,不支持从AstTokenSale合约类型到所需address类型的隐式转换
该报错仅出现在Solidity 0.5及以上版本,触发根因是Solidity从0.5版本开始取消了合约实例到地址类型的隐式自动转换规则:
- 代码中的
this关键字指代当前AstTokenSale合约的实例对象 - 你调用的
tokenContract.balanceOf()方法要求入参为address地址类型 - 旧版本Solidity会自动把合约实例转换为它的部署地址传入,新版本为了提升类型安全性,要求必须手动显式完成类型转换
修复方法
仅需将代码中的this替换为address(this),显式将当前合约实例转换为地址类型即可,修改后代码如下:
require(tokenContract.transfer(admin, tokenContract.balanceOf(address(this))));
补充注意事项
如果后续你使用Solidity 0.8及以上版本,且需要向当前合约地址转账、调用payable类型方法时,才需要额外转换为payable地址:payable(address(this)),本次调用balanceOf仅需普通地址类型,无需添加payable修饰。
内容的提问来源于stack exchange,提问作者StefanSubotic
相关产品推荐
相关产品推荐

