Solidity合约编译报DeclarationError标识符未找到错误求助
Solidity 编译报错 DeclarationError: Identifier not found or not unique 修复方案
你的代码存在3处可触发编译错误的问题,对应修复方式如下:
核心报错(定位到第5行import语句)原因:
./SimpleStorage.sol引入路径无效
逐一排查以下项即可解决:- 确认
SimpleStorage.sol与当前编写的StorageFactory合约文件处于同一目录层级 - 确认文件名大小写完全匹配:Linux、macOS系统文件系统大小写敏感,文件名若为
simplestorage.sol/Simplestorage.sol这类大小写不匹配的情况,会直接导致编译器找不到对应文件,无法识别SimpleStorage合约类型,抛出标识符未找到错误 - 确认被引入的
SimpleStorage.sol文件内,确实定义了名为SimpleStorage的合约,不存在合约名拼写、大小写错误。
- 确认
语法错误1:0.8.x版本Solidity实例化合约时,new关键字后调用合约需携带构造函数括号,原写法
new SimpleStorage需修改为new SimpleStorage()(无参构造也不能省略括号)语法错误2:数组push操作存在两个低级错误,后续会触发新的编译报错:
push是数组的内置方法,调用必须使用圆括号(),原代码写的方括号[]是数组索引访问语法,会触发类型不匹配错误- 传入push方法的变量名拼写错误:定义的变量名为
simpleStorage,原代码写为simpleStoarge(r、a字母顺序写反),属于未定义标识符,同样会触发DeclarationError
修复后可正常编译的完整代码
//SPDX-License-Identifier:MIT pragma solidity ^0.8.0; import "./SimpleStorage.sol"; contract StorageFactory{ SimpleStorage[] public SimpleStorageArray; function CreateSimpleStorageContract() public { SimpleStorage simpleStorage = new SimpleStorage(); SimpleStorageArray.push(simpleStorage); } }
替换代码后确认import路径、合约名匹配即可正常完成编译。
内容的提问来源于stack exchange,提问作者Muhammad Ali Kamal
相关产品推荐
相关产品推荐

