我正在尝试创建一个2D字符串数组来序列化我的结构,即:
struct Submission {
uint256 id;
address creator;
string title;
string IPFS_CID;
uint16 likeCount;
uint16 dislikeCount;
mapping(address => uint256) likes;
mapping(address => uint256) dislikes;
}随着…的进口
import "@openzeppelin/contracts/utils/Strings.sol";我想这么做:
function getLastNSubmissions(uint128 n) public view returns (string[][] memory) {
require((n-1) > 0, "Cannot get more submissions than available.");
string[][6] memory returnSubmissions;
uint start = submissionId - n;
uint pos = 0;
for (uint i=start; i < submissionId; i+=1) {
Submission storage s = submissions[i];
returnSubmissions[pos] = [
Strings.toString(s.id),
abi.encodePacked(s.creator),
s.title,
s.IPFS_CID,
Strings.toString(s.likeCount),
Strings.toString(s.dislikeCount)
];
}
}在returnSubmissions[Strings.toString(pos)] = new string[Strings.toString(s.id), ...]
我得到了以下错误:
Expected ']' but got ','有人能帮我修一下这段代码吗?谢谢。
发布于 2022-10-27 20:19:22
对于那些在白天遇到同样的问题的人来说:这就是我的功能是如何工作的:
/*
* Will return the last n submissions in serialized form: [n...][id, creator, title, CID, likeCount, dislikeCount]
*/
function getLastNSubmissions(uint256 n) public view returns (string[6][] memory) {
require(submissionId > 0, "There are no submissions yet.");
string[6][] memory returnSubmissions = new string[6][](n);
uint start = submissionId - n;
uint pos = 0;
for (uint i=start; i < submissionId; i+=1) {
Submission storage s = submissions[i];
returnSubmissions[pos][0] = Strings.toString(s.id);
returnSubmissions[pos][1] = Strings.toHexString(uint160(s.creator), 20);
returnSubmissions[pos][2] = s.title;
returnSubmissions[pos][3] = s.IPFS_CID;
returnSubmissions[pos][4] = Strings.toString(s.likeCount);
returnSubmissions[pos][5] = Strings.toString(s.dislikeCount);
pos += 1;
}
return returnSubmissions;
}发布于 2022-10-24 17:42:39
看起来您需要定义至少一个数组的长度。
见此:
定义二维数组时,与其他编程语言相比,多维数组的表示法只有在定义时才会反转。
对于本例,我们将比较两个数组:
字符串2 crypto_names;
字符串undefined names_A_to_F;
在第一个示例crypto_names中,我们完全有一个动态数组,但是它的元素是固定大小的数组(2)。在第二种情况下,names_A_to_F是一个固定大小的数组,其中包含6个元素,每个元素都是“来自链接的”动态数组。
https://ethereum.stackexchange.com/questions/138091
复制相似问题