Solidity合约报错:Contract 'InterfaceB'需标记为abstract的解决办法
Solidity 错误
TypeError: Contract "InterfaceB" should be marked as abstract 解决方案 错误原因
在Solidity语法规则里,普通contract必须实现所有声明的函数。如果一个contract只包含无函数体的空函数,编译器会要求将其标记为abstract。但你这里的InterfaceB本质是接口,应该用Solidity专门的interface关键字定义,而非contract。
解决步骤
- 把定义
InterfaceB的关键字从contract改为interface:这是Solidity定义接口的标准方式,接口默认所有函数都是external且无需实现,编译器不会再要求标记abstract。 - 修正
ContractB的函数修饰符顺序:Solidity要求状态修饰符(pure/view)必须放在可见性修饰符(external/public等)之后,即把pure external调整为external pure。 - 让
ContractB明确实现接口:通过is InterfaceB声明合约与接口的实现关系,确保合约符合接口规范。 - 修正字符串拼写错误:将
Hellow改为Hello。
修正后的完整代码
pragma solidity ^0.8.0; interface InterfaceB { function getMessage() external pure returns(string memory); } contract ContractB is InterfaceB { function getMessage() external pure returns(string memory){ return "Hello World."; } }
内容的提问来源于stack exchange,提问作者DeFi
相关产品推荐
相关产品推荐

