将结构存储在数组中(C++)
Posted
技术标签:
【中文标题】将结构存储在数组中(C++)【英文标题】:storing struct in array (C++) [duplicate] 【发布时间】:2016-10-23 21:31:34 【问题描述】:我是 C++ 的新手,我遇到了将结构存储在数组中的问题。我已经搜索了有关此问题的板,但似乎没有人遇到我的具体问题。
我正在创建一个基于文本的 RPG 游戏,它需要一个动态的法术数组。咒语是结构体,定义如下:-
struct spell
std::string mSpellName;
int mRequiredMagicPoints;
;
然后我创建并初始化结构的两个实例:-
spell fireBall "Fire Ball", 10;
spell magicMissile "Magic Missile", 5;
然后,在 main() 中,我尝试将这两个实例存储在一个向量数组中:-
int main()
std::vector<spell> mSpells[2];
mSpells[0] = fireBall;
mSpells[1] = magicMissile;
但是,Xcode 冲我大喊“没有可行的重载 '='”
我也尝试将这些结构存储在传统的动态数组中,但仍然无法编译。我做错了什么?
提前致谢!
【问题讨论】:
C is not C++ is not C. 不要使用错误的标签。 也许你的意思是std::vector<spell> mSpells(2);
,一个包含 2 个元素的向量。你实际写的是一个由 2 个空向量组成的数组
push_back
【参考方案1】:
std::vector<spell> mSpells[2];
定义一个向量数组。看来您只需要一个包含两个元素的向量。所以你开始但只是定义一个向量:
std::vector<spell> mSpells;
那么你有 several options 来添加元素:
mSpells.push_back(fireBall);
mSpells.emplace_back("Magic Missile", 5);
【讨论】:
【参考方案2】:您声明了一个包含两个vector
s 和spell
s 的数组。你显然只想要一个vector
,所以你想说:
vector<spell> mSpells(2);
这还将初始化 mSpells
以具有两个默认构造的元素。
你可能还想写:
vector<spell> mSpells;
mSpells.reserve(2); // optional, good idea
mSpells.push_back(fireBall);
mSpells.push_back(magicMissile);
【讨论】:
以上是关于将结构存储在数组中(C++)的主要内容,如果未能解决你的问题,请参考以下文章