Solidity智能合约第44行报错:Expected identifier but got '(' 求助
问题解决:Solidity构造函数报错Error: Expected identifier but got '('
错误原因及修复步骤
1. 依赖导入拼写错误
你的代码中第一个OpenZeppelin的导入路径存在拼写错误:
import "@openzeppelin/conracts/utils/Counters.sol";
其中conracts应为contracts,修正后:
import "@openzeppelin/contracts/utils/Counters.sol";
该拼写错误会导致编译器无法找到Counters库,进而引发语法解析异常,错误提示被误定位到构造函数处。
2. 构造函数内赋值运算符错误
构造函数中对owner的赋值误用了比较运算符==,应改为赋值运算符=:
constructor() ERC721("NFT Metaverse Token", "MYNFT") { owner = payable(msg.sender); // 修正为单等号 }
额外优化提示
由于ERC721URIStorage已继承ERC721,可移除重复的import "@openzeppelin/contracts/token/ERC721/ERC721.sol";导入,减少冗余。
修复后的完整合约代码
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; // INTERNAL IMPORT FOR NFT OPENZIPLINE import "@openzeppelin/contracts/utils/Counters.sol"; // 修正拼写错误 import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; // Using ERC721 standard import "hardhat/console.sol"; contract NFTMarketplace is ERC721URIStorage { using Counters for Counters.Counter; Counters.Counter private _tokenIds; Counters.Counter private _itemsSold; uint256 listingPrice = 0.0025 ether; address payable owner; mapping(uint256 => MarketItem) private idMarketItem; struct MarketItem { uint256 tokenId; address payable seller; address payable owner; uint256 price; bool sold; } event idMarketItemCreated( uint256 indexed tokenId, address seller, address owner, uint256 price, bool sold ); modifier onlyOwner() { require( msg.sender == owner, "only owner of the marketplace can change the listing price" ); _; } constructor() ERC721("NFT Metaverse Token", "MYNFT") { owner = payable(msg.sender); // 修正赋值运算符 } function updateListingPrice(uint256 _listingPrice) public payable onlyOwner { listingPrice = _listingPrice; } }
内容的提问来源于stack exchange,提问作者Avinash Gupta
相关产品推荐
相关产品推荐

