struct - Solidity将项目添加到结构中的嵌套数组
问题描述
我正在尝试将一个项目添加到一个结构内的结构数组中。
这是我的合同的样子:
contract AuctionHouse {
struct Bid {
address bidder;
uint256 amount;
uint256 timestamp;
}
struct Auction {
address seller;
uint256 reservePrice;
uint256 winnerBidAmount;
address winnerBidBidder;
Bid[] Bids;
}
function listItem (uint256 _tokenId) public returns (bool) {
Bid[] memory emptyBids;
auctions[_tokenId] = Auction({
seller: msg.sender,
reservePrice: _reservePrice,
winningBidAmount: 0,
winningBidBidder: address(0),
bids: emptyBids
});
return true;
}
function bid (uint256 _tokenId, uint256 _amount) public returns (bool) {
Auction currentAuction = auctions[_tokenId];
uint256 newBidIndex = currentAuction.bids.length + 1;
Bid newBid = currentAuction[newBidIndex];
newBid.bidder = msg.sender;
newBid.amount = msg.amount;
newBid.timestamp = block.timestamp;
currentAuction.winningBidAmount = msg.value;
currentAuction.winningBidBidder = msg.sender;
return true;
}
}
但我得到了错误:
contracts/AuctinoHouse.sol:274:26: TypeError: Indexed expression has to be a type, mapping or array (is struct TripAuctionHouse.Auction storage pointer)
Bid storage newBid = currentAuction[newBidIndex];
我还尝试在出价功能内部进行更改:
Auction currentAuction = auctions[_tokenId];
拥有storage
或memory
并试图解决这个问题,但这会产生不同的错误。
这样做的正确方法是什么?
解决方案
你以错误的方式抓住了 newBid
Bid newBid = currentAuction[newBidIndex];
这将返回 Auction 结构,而不是 Bid
我替换了这样的代码:
function bid (uint256 _tokenId, uint256 _amount) public returns (bool) {
Auction currentAuction = auctions[_tokenId];
uint256 newBidIndex = currentAuction.bids.length + 1;
Bid newBid = currentAuction.Bids[newBidIndex];
newBid.bidder = msg.sender;
newBid.amount = msg.amount;
newBid.timestamp = block.timestamp;
currentAuction.winningBidAmount = msg.value;
currentAuction.winningBidBidder = msg.sender;
return true;
}
推荐阅读
- css - 输入字段对齐
- c - 是否可以使用 for 循环编写“else if”N 次?
- r - 如何使用 substr() 删除 mpg$trans 数据中的 NA
- java - 如何使用 InvokeLater 在 JFrame 中显示我的所有组件?
- java - Hamcrest 匹配器返回项目而不是可迭代的项目
- python - 如果连接丢失,如何从 Celery 队列中删除任务?
- php - WooCommerce 产品循环中添加 Ajax 选项的复选框添加到购物车
- r - R 合并两个 gsub() 语句
- excel - 在 Excel 中的多选下拉列表中仅限制两个选择
- android - 如何将图像保存在外部存储中并使其在 Android 5.1 中的图库中可见?