如何在 Solidity 中将结构保存在数组中?
How to save structs in array in Solidity?
我写了一个非常简单的智能合约,它执行以下操作:
- 声明一个名为 Player 的结构,它有 2 个字段:name 和 goals
- 定义一个函数,它将名称和目标作为输入来创建结构的新实例
- 将新玩家存储到玩家数组中
代码如下:
pragma solidity ^0.8.0;
contract MyContract {
// Declare struct
struct Player {
string name;
uint goals;
}
// Declare array
Player[] player;
function addPlayer(string calldata _name, uint _goals) external pure{
Player memory player = Player({name:_name, goals:_goals}); // This declaration shadows an existing declaration.
players.push(player); // Member "push" not found or not visible after argument-dependent lookup in struct MyContract.Player memory.
}
}
我的目标是使用 addPlayer() 函数将玩家添加到 players 数组
然而,VisualStudio 编辑器 returns 出现错误,因为它被 Player 变量的声明弄糊涂了,该变量似乎是两次。
能否请您提供一种巧妙而优雅的方式来实现我的目标?
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyContract {
// Declare struct
struct Player {
string name;
uint goals;
}
// Declare array
Player[] players;
function addPlayer(string calldata _name, uint _goals) external {
Player memory player = Player(_name,_goals); // This declaration shadows an existing declaration.
players.push(player); // Member "push" not found or not visible after argument-dependent lookup in struct MyContract.Player memory.
}
}
感谢 Chíp Thảo 留下不完整解释的答案:)
下面继续解释:
在第 12 行中,您声明了一个数组 Player[] player
,名称为 player
,并且在第 16 行中,您再次声明了一个名称为 player
的变量!最好将第 12 行更改为 players
.
我写了一个非常简单的智能合约,它执行以下操作:
- 声明一个名为 Player 的结构,它有 2 个字段:name 和 goals
- 定义一个函数,它将名称和目标作为输入来创建结构的新实例
- 将新玩家存储到玩家数组中
代码如下:
pragma solidity ^0.8.0;
contract MyContract {
// Declare struct
struct Player {
string name;
uint goals;
}
// Declare array
Player[] player;
function addPlayer(string calldata _name, uint _goals) external pure{
Player memory player = Player({name:_name, goals:_goals}); // This declaration shadows an existing declaration.
players.push(player); // Member "push" not found or not visible after argument-dependent lookup in struct MyContract.Player memory.
}
}
我的目标是使用 addPlayer() 函数将玩家添加到 players 数组 然而,VisualStudio 编辑器 returns 出现错误,因为它被 Player 变量的声明弄糊涂了,该变量似乎是两次。
能否请您提供一种巧妙而优雅的方式来实现我的目标?
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyContract {
// Declare struct
struct Player {
string name;
uint goals;
}
// Declare array
Player[] players;
function addPlayer(string calldata _name, uint _goals) external {
Player memory player = Player(_name,_goals); // This declaration shadows an existing declaration.
players.push(player); // Member "push" not found or not visible after argument-dependent lookup in struct MyContract.Player memory.
}
}
感谢 Chíp Thảo 留下不完整解释的答案:)
下面继续解释:
在第 12 行中,您声明了一个数组 Player[] player
,名称为 player
,并且在第 16 行中,您再次声明了一个名称为 player
的变量!最好将第 12 行更改为 players
.