Solidity编译报Identifier not found错误 onlyOwner修饰符无法识别
问题根源
你仅导入了Ownable.sol文件,但未在合约定义时继承该合约,因此onlyOwner修饰符、owner()函数等Ownable内置的成员均不会被你的TestCoin合约识别,直接调用就会触发标识符未找到的报错。
解决步骤
- 补全合约继承声明
修改合约定义行,在原有继承ERC20的基础上追加Ownable继承:
// 修改前 contract TestCoin is ERC20 { // 修改后 contract TestCoin is ERC20, Ownable {
- 修正ERC20构造函数逻辑
你当前的构造函数存在逻辑错误,将父类ERC20的默认值反向赋值给了入参,正确写法是调用父类ERC20的构造函数传入自定义的名称和符号:
// 修改前 constructor(_name, _symbol) { _name = name(); _symbol = symbol(); } // 修改后 constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { // 可在此处添加自定义初始化逻辑,比如给部署地址铸币: // _mint(msg.sender, 10000 * 10 ** decimals()); }
补充说明:Solidity 0.8及以上版本已经内置数值溢出/下溢检查,你导入的
SafeMath.sol属于冗余依赖,可直接删除该行导入语句。
修改完成后重新执行truffle compile即可正常编译,onlyOwner修饰符、owner()函数都可以正常调用。
内容的提问来源于stack exchange,提问作者SeniorDeveloper
相关产品推荐
相关产品推荐

