从Solidity函数返回string遇类型错误求助(Remix IDE)
问题解决方法
首先看你的代码,核心错误是变量名不匹配:
你定义的mapping是tokenToURI,但函数里返回的却是typeToToken——这个typeToToken应该是你代码里另一个类型为uint256 => uint256[]的mapping,所以返回的类型和函数声明的string memory完全不匹配,才会报类型转换错误。
另外你尝试在mapping里加memory是错误的,Solidity里mapping的存储类型是固定的,值类型前不能加memory修饰符。当你从mapping里读取string类型的值返回时,Solidity会自动把storage里的字符串拷贝到memory中,符合函数返回值的要求。
修正后的代码如下:
// 如果你实际想用的mapping是typeToURI,先修正定义 mapping(uint256 => string) typeToURI; function tokenTypeURI(uint256 tokenType) public returns (string memory) { // 返回对应mapping的正确变量名 return typeToURI[tokenType]; }
或者如果你原来的mapping确实叫tokenToURI,那函数里就返回这个变量:
mapping(uint256 => string) tokenToURI; function tokenTypeURI(uint256 tokenType) public returns (string memory) { return tokenToURI[tokenType]; }
总结一下:
- 先检查变量名是否一致,这是导致类型错误的根本原因
- 不需要在mapping定义里加
memory,返回string时Solidity会自动处理存储类型转换
内容的提问来源于stack exchange,提问作者saeedhsb
相关产品推荐
相关产品推荐

