Address.transfer
應付地址類型錯誤
剛剛將鬆露升級到版本 5,並且對這種新
address payable
類型有問題。contract Test { ERC721Full public tokenAddress; constructor(address _address) public { tokenAddress = ERC721Full (_address); } function sendToOwner(...) public payable { address payable owner = tokenAddress.ownerOf(_tokenId); owner.transfer(msg.value); } }
所以我正在嘗試將乙太幣發送到所有者帳戶,但我得到了
TypeError:類型地址不能隱式轉換為預期的應付類型地址。
如何解決這個問題?
tokenAddress.ownerOf()
可能返回一個address
,不是address payable
。請參閱此執行緒以獲取執行此操作的方法:將契約轉換為應付地址
這個問題可能很舊,答案已經得到批准。
但我偶然發現了這個問題,尋找答案並沒有找到我想要的東西,所以對於未來(0.8.0 之後)來到這裡的窺視者,
您正在尋找的答案是:
改變這個
owner.transfer(msg.value);
對此:
payable(owner).transfer(msg.value);
所以基本上預設地址不能更改為應付地址,但可以在需要時將它們包裝起來
payable(address)
以具有該功能:D希望這個答案有幫助