here is my code, the another contract is a normal ERC721 contract.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
interface IRC721 {
function approve(address _to, uint256 _tokenid) external returns(uint256);
function setERC20ContractAddress (address _address) external;
function setApprovalForAll(address _to, bool _approved) external returns(uint256);
function ownerOf(uint256 _tokenid) external returns(address);
function owner() external returns(address);
function transferFrom(address _from, address _to, uint256 _tokenid) external returns(uint256);
function safeTransferFrom(address _from, address _to, uint256 _tokenid) external returns(uint256);
}
contract Transer721 {
IRC721 public tract;
constructor () {
tract = IRC721(0x2f4B8B1545B47a8420C36a7be4b4Fa2896a732ca);
}
function transferFromCrontract(uint256 _tokenid) payable public {
address owner = tract.ownerOf(_tokenid);
tract.safeTransferFrom(owner, msg.sender, _tokenid);
}
}