Solidity
使用 SafeMath 的編譯錯誤
我正在嘗試使用 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:在 uint8 中進行參數相關查找後,找不到成員“sub”或不可見。數字=數字.sub(1); ^—–^
有人請指導我。
祖爾菲。
您收到該錯誤的原因
num
是 typeuint8
,而sub()
SafeMath 的功能正在尋找 typeuint256
。此外,您聲明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 處理 type
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; } }