Solidity将项目添加到结构中的嵌套数组
Solidity adding item to nested array in struct
我正在尝试向作为结构的数组添加一个项目,在结构中。
我的合同是这样的:
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
并尝试解决这个问题,但这会产生不同的错误。
正确的做法是什么?
你抓错了新出价
Bid newBid = currentAuction[newBidIndex];
这将 returns 拍卖结构,而不是投标
我这样替换了代码:
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;
}
我正在尝试向作为结构的数组添加一个项目,在结构中。
我的合同是这样的:
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
并尝试解决这个问题,但这会产生不同的错误。
正确的做法是什么?
你抓错了新出价
Bid newBid = currentAuction[newBidIndex];
这将 returns 拍卖结构,而不是投标
我这样替换了代码:
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;
}