Solidity合约中transferFrom函数报Expected ';' but got ','错误,safeTransferFrom函数无此问题的技术求助
解决Solidity transferFrom函数的语法错误
嘿,我帮你定位到了几个导致这个语法错误的问题,咱们一步步来修正:
核心错误分析
你遇到的Expected ';' but got ','错误,根源是函数参数的定义位置完全错了,同时还有好几处拼写失误:
- 参数位置错误:Solidity要求函数参数必须写在函数名后的括号里,而不是函数体内部。你把
address from,这类参数写在了函数体开头,这完全不符合Solidity的语法规范。 - 函数名拼写错误:
trasferFrom应该是transferFrom,safeTrasferFrom应该是safeTransferFrom(都少了一个字母n)。 - 变量拼写错误:
tokennId多了一个n,正确的是tokenId。 - 函数调用遗漏分号:Solidity语句末尾必须加分号,你调用
_tranfer和_safeTrasferFrom后都没加。 - 内部函数拼写错误:
_tranfer应该是_transfer。
修正后的完整代码
// 修正后的transferFrom函数 function transferFrom( address from, address to, uint256 tokenId ) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); buildings[tokenId - 1].owner = to; _transfer(from, to, tokenId); } // 修正后的safeTransferFrom函数 function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); buildings[tokenId - 1].owner = to; _safeTransferFrom(from, to, tokenId, _data); }
额外提示
写Solidity合约时,一定要注意语法细节:
- 参数必须放在函数名后的括号内,多个参数可以换行对齐提升可读性
- 所有语句末尾必须加
; - 内置函数、变量名的拼写要准确,很多错误都是拼写失误导致的
内容的提问来源于stack exchange,提问作者RainbowFcker
相关产品推荐
相关产品推荐

