blockchain - solidity 错误 - 在 uint256 中进行参数相关查找后,成员“子”未找到或不可见
问题描述
我写了一个简单的智能合约,但它在传输函数中有错误,Member "sub" not found or not visible after argument-dependent lookup in uint256.
可能导致错误的原因是什么?是因为solidity版本吗?
pragma solidity ^0.5.16;
contract Token {
string public name = "Token";
string public symbol = "TK";
uint256 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf; //Track balance
constructor() public {
totalSupply = 1000000 * (10 ** decimals);
balanceOf[msg.sender] = totalSupply;
}
//Send Token
function transfer(address _to, uint256 _value) public returns(bool success){
balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); //error on this line
balanceOf[_to] = balanceOf[_to].add(_value);
return true;
}
}
解决方案
我们需要导入SafeMath.sol
库并声明它的用法。之后,我们可以调用带有变量.sub
的函数。.add
uint256
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.16;
// Import SafeMath library
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
// Or we can import from online
import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/master/contracts/utils/math/SafeMath.sol";
contract Token {
// declar SafeMath libary usage for uint256
using SafeMath for uint256;
string public name = "Token";
string public symbol = "TK";
uint256 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf; //Track balance
constructor() public {
totalSupply = 1000000 * (10 ** decimals);
balanceOf[msg.sender] = totalSupply;
}
//Send Token
function transfer(address _to, uint256 _value) public returns(bool success){
balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); //error on this line
balanceOf[_to] = balanceOf[_to].add(_value);
return true;
}
}
推荐阅读
- c++ - 使用其他编译器编译 QT 代码
- file - Wildfly 报错打开文件太多,ulimit 不起作用
- javascript - 检查字符串是否存在于另一个字符串中(不完全相等)
- php - 绕过Instagram checkout_point
- vba - VBA 在下一张纸上搜索值
- android-studio - Android Studio 3.1.3 中缺少 LogCat
- java - Google Dataflow Java SDK 在数据迁移期间引发异常
- google-cloud-platform - 如何使用 Apache Beam 和 DataFlowRunner 将数据写入 Google MemoryStore(Redis)
- vba - 排序对话框锁定数据标题 vba
- c - 为什么未初始化而不是越界?