Solidity返回uint类型报错:代币总供应量查询函数编译失败如何解决?
Solidity编译报错原因分析
第一个报错(ParserError: Expected primary expression)触发原因
returns是Solidity中专门用于函数签名阶段声明返回值类型、数量的关键字,不允许写在函数执行体内部。函数执行体中返回数据必须使用return关键字,你混淆了两个关键字的使用场景,因此触发语法解析错误。
第二个报错(TypeError: Different number of arguments in return statement than in returns declaration)触发原因
- 将
returns改为return后,你的函数没有在签名位置声明返回值的类型和数量,编译器无法匹配到对应返回值定义,因此判定返回参数和声明不匹配。 - 额外存在逻辑设计问题:
CheckTotalSupply的作用是返回合约中存储的全局总发行量totalSupply,完全不需要额外定义uint supply作为入参,传入的参数和你要查询的目标值没有关联。
修正后的正确代码示例
address public owner; mapping(address => uint) public balances; uint public totalSupply; // 也可以直接加public修饰符,Solidity会自动生成查询函数,不需要手动写CheckTotalSupply function mint(address receiver, uint amount) public { require(msg.sender == owner); totalSupply += amount; balances[receiver] += amount; } // 手动实现总供给查询函数的正确写法 function CheckTotalSupply() public view returns(uint) { return totalSupply; }
补充说明:如果给状态变量
totalSupply直接加public修饰符,Solidity会自动生成同名的查询函数,不需要你手动实现CheckTotalSupply也能调用查询总供给。
内容的提问来源于stack exchange,提问作者DamilolaOwonibi
相关产品推荐
相关产品推荐

