solidity - 坚固性 | 在派生合约中正确使用“using a for b”语句
问题描述
我有一份使用 Open-Zeppelin SafeMath 的合同,但派生合同不承认该声明。
Base.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";
contract Base {
using SafeMath for uint256;
}
测试.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
import "Base.sol";
contract Test is Base {
function getnum(uint256 _number) external view returns (uint256) {
return _number.add(_number);
}
}
但我不断收到此错误:
Member "add" not found or not visible after argument-dependent lookup in uint256.
解决方案
using A for B
声明者在solidity 0.7中发生了变化,现在我们必须在所有派生合约中重复声明:
using A for B
仅影响提及它的合同。以前,效果是继承的。using
现在,您必须在使用该功能的所有派生合约中重复该 语句。
https://solidity.readthedocs.io/en/v0.7.4/070-break-changes.html#functions-and-events
推荐阅读
- swift - 关于 segue 和视图控制器的 Swift 问题
- python - 如何在 Python 中加速并行化
- java - Antlr 4 没有给出错误的正确行和位置
- sql - 我的 select 语句的正确原型是什么?
- c++ - 调用我也有 const 引用的 std::function
- android - TxPower 总是 127 与 Android 蓝牙 LE
- python - 在多进程/多进程中切片数据帧会提高性能吗?
- angular - 如何处理角度模型对象的动态数据类型
- c# - 如何使用 SqlDataReader 向表中的每个人发送电子邮件
- php - myDHL API 响应