我正在尝试使用SafeMath库执行减法操作。以下是我的代码:
pragma solidity ^0.5.1;
library SafeMath {
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
}
contract Underflow1 {
using SafeMath for uint;
uint8 num= 0;
function testf2() public returns (uint8){
//val--;
num= num.sub(1);
return num;
}
}我收到以下错误消息:
browser/UF8-SM.sol:13:10: TypeError:成员"sub“在uint8中的参数依赖查找后未找到或不可见。num= num.sub(1);^
谁来指点我。
祖尔菲。
发布于 2019-06-11 15:57:38
获得该错误的原因是num的类型为uint8,而SafeMath的sub()函数正在寻找uint256类型。此外,您还声明了using SafeMath for uint;,这证实它只适用于uint256 (因为uint是uint256的别名)。
有两种方法可以解决这个问题:
1)将num设置为uint256类型。您的代码如下所示:
pragma solidity ^0.5.1;
library SafeMath {
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
}
contract Underflow1 {
using SafeMath for uint;
uint256 num= 0;
function testf2() public returns (uint256){
//val--;
num = num.sub(1);
return num;
}
}2) (不首选)允许SafeMath处理uint8类型。您的代码如下所示:
pragma solidity ^0.5.1;
library SafeMath {
function sub(uint8 a, uint8 b) internal pure returns (uint8) {
assert(b <= a);
return a - b;
}
}
contract Underflow1 {
using SafeMath for uint8;
uint8 num= 0;
function testf2() public returns (uint8){
//val--;
num = num.sub(1);
return num;
}
}https://ethereum.stackexchange.com/questions/71726
复制相似问题