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

Remix IDE编译Solidity智能合约失败:未声明标识符Strings

问题解决:DeclarationError: Undeclared identifier (Strings)

错误原因是合约中使用了Strings.toString()方法,但未导入OpenZeppelin提供的Strings工具库,导致编译器无法识别Strings这个标识符。

解决方案

  1. 在合约顶部的导入语句中添加Strings库的导入:
import "@openzeppelin/contracts@4.9.3/utils/Strings.sol";
  1. 导入完成后,原uri函数的逻辑无需修改,编译器即可正常识别Strings.toString()方法。

修改后的完整合约代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts@4.9.3/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts@4.9.3/access/Ownable.sol";
import "@openzeppelin/contracts@4.9.3/token/ERC1155/extensions/ERC1155Supply.sol";
import "@openzeppelin/contracts@4.9.3/utils/Strings.sol"; // 添加Strings库导入

contract Cloud is ERC1155, Ownable, ERC1155Supply {

    uint256 constant SleepyPinkDragon = 1;
    uint256 constant ThickCloud = 2;
    uint256 constant BlackHairPelicanCloud = 3;
    uint256 constant Superhuman = 4;
    uint256 constant Rattle = 5;

    mapping (uint256 => string) private _uris;

    constructor() ERC1155("https://arweave.net/ibSCLjO_4VRQ7Q1DYHuC3chjFR_wpTJr9UuvK_XcRhs/ou.json")
    {
         
     _mint(msg.sender, SleepyPinkDragon, 22, "");
     _mint(msg.sender, ThickCloud, 5, "");
     _mint(msg.sender, BlackHairPelicanCloud, 5, "");
     _mint(msg.sender, Superhuman, 3, "");
     _mint(msg.sender, Rattle, 3, "");
    }

function uri(uint256 _tokenId) override public pure returns (string memory){
        return string(abi.encodePacked("https://arweave.net/ibSCLjO_4VRQ7Q1DYHuC3chjFR_wpTJr9UuvK_XcRhs/ou", Strings.toString(_tokenId),".json"));
    }


    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

额外说明:Solidity 0.8.0及以上版本支持直接用string(_tokenId)替代Strings.toString(_tokenId),可避免额外导入库,但推荐使用OpenZeppelin工具库以保证兼容性和安全性。

内容的提问来源于stack exchange,提问作者Dank1212

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:06:04