首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带函数类型误差

带函数类型误差
EN

Ethereum用户
提问于 2022-07-15 05:59:44
回答 1查看 36关注 0票数 0

我一直在学习一门课程,我遵循了他们的代码,不知怎么的,当我编译我的代码时,它给了我一个错误,而我所遵循的课程没有错误,请有人帮助我。

代码语言:javascript
复制
pragma solidity ^0.8.7;


import './ERC165.sol';
import './IERC721.sol';

contract ERC721 is ERC165, IERC721 {

        function ownerOf(uint256 _tokenId) public override view returns (address) {
            address owner = _tokenOwner[_tokenId];
            require(owner != address(0), 'owner query for non-existent token');
            return owner;
        }

    // mapping in solidity creates a hash table of key pair values

    // Mapping from token id to the owner
    mapping(uint => address) private _tokenOwner;


    // Mapping from owner to number of owned tokens
    mapping(address => uint256) private _OwnedTokensCount;

    mapping(uint256 => address) private _tokenApprovals;

    constructor() {
        _registerInterface(bytes4(keccak256('balanceOf(bytes4)')^
        keccak256('ownerOf(bytes4)')^keccak256('transferFrom(bytes4)')));
    }

    function balanceOf(address _owner) public override view returns (uint256) {
        require(_owner != address(0), 'owner query for non-existant token');
        return _OwnedTokensCount[_owner];
    }
    
    function _exists(uint256 tokenId) internal view returns(bool) {
       // setting the address of nft owner to check the mapping
       // of the address from tokenOwner at the tokenId
       address owner = _tokenOwner[tokenId]; 
       // return truthiness tha address is not zero
       return owner != address(0);
    }



    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), 'ERC721: minting to the zero address');
        require(!_exists(tokenId), 'ERC721: token already minted');
        _tokenOwner[tokenId] = to;
        _OwnedTokensCount[to] += 1;

        emit Transfer(address(0), to, tokenId);
    }

    function _transferFrom(address _from, address _to, uint256 _tokenId) external payable
    {
        require(_to != address(0), 'Error - ERC721 transfer to the zero address');
        require(ownerOf(_tokenId) == _from, 'Trying to transfer a token the address does not own!');

        _OwnedTokensCount[_from] -= 1;
        _OwnedTokensCount[_from] += 1;
        
        _tokenOwner[_tokenId] = _to;

        emit Transfer(_from, _to, _tokenId);
    }


    function transferFrom(address _from, address _to, uint256 _tokenId) override public {
        require(msg.sender, _tokenId);
        transferFrom(_from, _to, _tokenId);
    }

    function approve(address _to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(_to != owner, 'Error - approval to current owner');
        require(msg.sender == owner, 'Current caller is not the owner of the token');
        _tokenApprovals[tokenId] = _to;
        emit Approval(owner, _to, tokenId);
    }
}

错误发生在名为transferfrom的函数上,给了我一个错误,上面写着1:https://i.stack.imgur.com/m3Eio.png

请帮帮我,我被困在这里一个小时了,我不知道该怎么办。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-07-15 07:13:08

这个代码是错误的:

代码语言:javascript
复制
function transferFrom(address _from, address _to, uint256 _tokenId) override public {
        require(msg.sender, _tokenId);
        transferFrom(_from, _to, _tokenId);
}

应:

代码语言:javascript
复制
function transferFrom(address _from, address _to, uint256 _tokenId) override public {
    require(msg.sender == _tokenOwner[_tokenId]," Error, not the owner"); 
    transferFrom(_from, _to, _tokenId);
}

在要求中应该有判断力,你可以将它改为其他的。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/131794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档