使用_tokenURIs出现未声明标识符错误,求解决方案及原因
错误原因
你代码里用到的_tokenURIs变量没有在合约中声明,Solidity编译器找不到这个标识符,所以抛出了“Undeclared identifier”错误。编译器提示你是不是打错成_tokenURI或tokenURI,是因为这两个名称在标准代币合约(比如OpenZeppelin实现)里更常见。
解决方案
- 在合约的状态变量区域(所有函数之外)声明
_tokenURIs映射,用来存储每个代币ID对应的URI:
mapping(uint256 => string) private _tokenURIs;
- 确保合约中包含
MetadataUpdate事件的声明,如果你的合约没有继承自带该事件的父合约,需要手动添加:
event MetadataUpdate(uint256 indexed tokenId);
修改后的完整代码示例:
// 声明MetadataUpdate事件(按需添加) event MetadataUpdate(uint256 indexed tokenId); // 声明存储代币URI的映射 mapping(uint256 => string) private _tokenURIs; function setTokenURI (uint256 bujiId, string memory _tokenURI) internal virtual { _tokenURIs[bujiId] = _tokenURI; emit MetadataUpdate(bujiId); }
内容的提问来源于stack exchange,提问作者Wisnu Wardhana
相关产品推荐
相关产品推荐

