问题正文:
我正在使用 OpenZeppelin 库开发 ERC721 合约,在 Solidity 合约中调用 _exists() 时遇到错误。错误信息是:
声明错误:未声明的标识符。
详情:
Solidity version: ^0.8.0
Using OpenZeppelin contracts:
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
问题:导致错误的行是:
require(_exists(tokenId), "Token不存在");
我以为_exists()可以通过ERC721或ERC721Enumerable使用,但似乎该函数没有被识别。
问题:
Why is _exists() not being recognized in this context?
How can I properly use _exists() to check if a token ID exists in my contract, or what is an appropriate workaround?
任何指导或见解将不胜感激!
我尝试过的:
I imported ERC721 and ERC721Enumerable from OpenZeppelin and used them as base contracts in my custom contract.
I called the _exists(tokenId) function in a tokenURI() method and other functions to check for the existence of tokens.
我的期望:
我希望 Solidity 编译器能够将 _exists() 函数识别为 ERC721 或 ERC721Enumerable 基础合约的一部分,从而允许我检查代币 ID 是否存在而没有问题。
实际发生的事情:
编译器抛出以下错误:
声明错误:未声明的标识符。
在调用 _exists() 的每个实例中都会发生这种情况,表明该函数在我当前的合同范围内不可用或未被识别。
我猜,问题是由合约中正确的继承和函数可见性引起的。
_exist()
函数。ownerOf()
函数作为替代方法。希望对您有所帮助。 谢谢