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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:52:49